备忘录模式:轻松实现撤销与状态恢复

备忘录模式概述

备忘录模式(Memento Pattern)是一种行为设计模式,允许在不破坏封装性的前提下捕获并外部化对象的内部状态,以便后续恢复。该模式常用于实现撤销操作、历史记录或快照功能。

核心角色

  1. Originator(原发器):负责创建备忘录对象以保存当前状态,并可从备忘录恢复状态。
  2. Memento(备忘录):存储原发器的内部状态,通常仅允许原发器访问其数据。
  3. Caretaker(管理者):负责保存和管理备忘录,但不直接操作其内容。

C++实现示例

以下代码展示备忘录模式的基本实现:

备忘录类(Memento)

class Memento {
private:
    std::string state; // 保存的状态数据
    // 仅允许Originator访问私有成员
    friend class Originator;  
    Memento(const std::string& state) : state(state) {}
    std::string GetState() const { return state; }
};

原发器类(Originator)

class Originator {
private:
    std::string state;
public:
    void SetState(const std::string& state) { this->state = state; }
    std::string GetState() const { return state; }

    // 创建备忘录
    Memento* CreateMemento() const {
        return new Memento(state);
    }

    // 从备忘录恢复状态
    void RestoreFromMemento(const Memento* memento) {
        state = memento->GetState();
    }
};

管理者类(Caretaker)

class Caretaker {
private:
    std::vector<Memento*> mementos;
public:
    void AddMemento(Memento* memento) {
        mementos.push_back(memento);
    }
    Memento* GetMemento(int index) const {
        return mementos.at(index);
    }
};

应用场景

  1. 撤销/重做功能:保存对象的历史状态,支持回退到任意时间点。
  2. 游戏存档:存储游戏角色的状态以便恢复。
  3. 事务回滚:数据库操作中保存事务前的状态。

注意事项

  • 封装性保护:备忘录应限制外部直接访问,仅通过原发器修改状态。
  • 性能开销:频繁保存大对象可能导致内存占用问题,需权衡存储粒度。

通过合理使用备忘录模式,可以增强系统的灵活性和可维护性,尤其在需要状态管理的场景中表现突出。

BbS.okane408.info/PoSt/1121_755587.HtM
BbS.okane409.info/PoSt/1121_207698.HtM
BbS.okane410.info/PoSt/1121_157175.HtM
BbS.okane411.info/PoSt/1121_856793.HtM
BbS.okane412.info/PoSt/1121_385877.HtM
BbS.okane413.info/PoSt/1121_298278.HtM
BbS.okane414.info/PoSt/1121_324769.HtM
BbS.okane415.info/PoSt/1121_696099.HtM
BbS.okane416.info/PoSt/1121_298746.HtM
BbS.okane417.info/PoSt/1121_943550.HtM
BbS.okane408.info/PoSt/1121_865039.HtM
BbS.okane409.info/PoSt/1121_488021.HtM
BbS.okane410.info/PoSt/1121_981575.HtM
BbS.okane411.info/PoSt/1121_328839.HtM
BbS.okane412.info/PoSt/1121_641881.HtM
BbS.okane413.info/PoSt/1121_407201.HtM
BbS.okane414.info/PoSt/1121_017785.HtM
BbS.okane415.info/PoSt/1121_033215.HtM
BbS.okane416.info/PoSt/1121_477625.HtM
BbS.okane417.info/PoSt/1121_960241.HtM
BbS.okane418.info/PoSt/1121_253854.HtM
BbS.okane419.info/PoSt/1121_109890.HtM
BbS.okane420.info/PoSt/1121_345729.HtM
BbS.okane421.info/PoSt/1121_137451.HtM
BbS.okane422.info/PoSt/1121_053416.HtM
BbS.okane423.info/PoSt/1121_610094.HtM
BbS.okane424.info/PoSt/1121_811961.HtM
BbS.okane425.info/PoSt/1121_885285.HtM
BbS.okane426.info/PoSt/1121_490753.HtM
BbS.okane427.info/PoSt/1121_456942.HtM
BbS.okane418.info/PoSt/1121_410279.HtM
BbS.okane419.info/PoSt/1121_942978.HtM
BbS.okane420.info/PoSt/1121_321139.HtM
BbS.okane421.info/PoSt/1121_587301.HtM
BbS.okane422.info/PoSt/1121_951639.HtM
BbS.okane423.info/PoSt/1121_687990.HtM
BbS.okane424.info/PoSt/1121_724025.HtM
BbS.okane425.info/PoSt/1121_760694.HtM
BbS.okane426.info/PoSt/1121_561566.HtM
BbS.okane427.info/PoSt/1121_550753.HtM
BbS.okane418.info/PoSt/1121_164481.HtM
BbS.okane419.info/PoSt/1121_534860.HtM
BbS.okane420.info/PoSt/1121_427074.HtM
BbS.okane421.info/PoSt/1121_872756.HtM
BbS.okane422.info/PoSt/1121_044652.HtM
BbS.okane423.info/PoSt/1121_283842.HtM
BbS.okane424.info/PoSt/1121_267340.HtM
BbS.okane425.info/PoSt/1121_524584.HtM
BbS.okane426.info/PoSt/1121_012001.HtM
BbS.okane427.info/PoSt/1121_125766.HtM
BbS.okane418.info/PoSt/1121_380056.HtM
BbS.okane419.info/PoSt/1121_149573.HtM
BbS.okane420.info/PoSt/1121_258989.HtM
BbS.okane421.info/PoSt/1121_516067.HtM
BbS.okane422.info/PoSt/1121_983316.HtM
BbS.okane423.info/PoSt/1121_789078.HtM
BbS.okane424.info/PoSt/1121_586077.HtM
BbS.okane425.info/PoSt/1121_413083.HtM
BbS.okane426.info/PoSt/1121_339303.HtM
BbS.okane427.info/PoSt/1121_904585.HtM
BbS.okane418.info/PoSt/1121_630989.HtM
BbS.okane419.info/PoSt/1121_522996.HtM
BbS.okane420.info/PoSt/1121_125550.HtM
BbS.okane421.info/PoSt/1121_968030.HtM
BbS.okane422.info/PoSt/1121_870779.HtM
BbS.okane423.info/PoSt/1121_929941.HtM
BbS.okane424.info/PoSt/1121_960448.HtM
BbS.okane425.info/PoSt/1121_581141.HtM
BbS.okane426.info/PoSt/1121_240679.HtM
BbS.okane427.info/PoSt/1121_768035.HtM
BbS.okane418.info/PoSt/1121_297295.HtM
BbS.okane419.info/PoSt/1121_640188.HtM
BbS.okane420.info/PoSt/1121_160883.HtM
BbS.okane421.info/PoSt/1121_656005.HtM
BbS.okane422.info/PoSt/1121_035339.HtM
BbS.okane423.info/PoSt/1121_304611.HtM
BbS.okane424.info/PoSt/1121_402614.HtM
BbS.okane425.info/PoSt/1121_384091.HtM
BbS.okane426.info/PoSt/1121_058763.HtM
BbS.okane427.info/PoSt/1121_515663.HtM

#牛客AI配图神器#

全部评论

相关推荐

肥肠椒绿:我上周发满意度调查了,但状态还没变
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务