备忘录模式:轻松实现撤销与状态恢复
备忘录模式概述
备忘录模式(Memento Pattern)是一种行为设计模式,允许在不破坏封装性的前提下捕获并外部化对象的内部状态,以便后续恢复。该模式常用于实现撤销操作、历史记录或快照功能。
核心角色
- Originator(原发器):负责创建备忘录对象以保存当前状态,并可从备忘录恢复状态。
- Memento(备忘录):存储原发器的内部状态,通常仅允许原发器访问其数据。
- 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);
}
};
应用场景
- 撤销/重做功能:保存对象的历史状态,支持回退到任意时间点。
- 游戏存档:存储游戏角色的状态以便恢复。
- 事务回滚:数据库操作中保存事务前的状态。
注意事项
- 封装性保护:备忘录应限制外部直接访问,仅通过原发器修改状态。
- 性能开销:频繁保存大对象可能导致内存占用问题,需权衡存储粒度。
通过合理使用备忘录模式,可以增强系统的灵活性和可维护性,尤其在需要状态管理的场景中表现突出。
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
查看10道真题和解析
SHEIN公司福利 758人发布