设计模式——备忘录模式(memento)

设计模式——备忘录模式(memento)Originator 发起人 负责创建一个备忘录 Memento 用以记录当前时刻的内部状态 并且可以使用备忘录恢复内部状态

备忘录模式(Memento)

备忘录模式是一个行为设计模式模式,允许在不对外暴露实现细节的情况下保存和恢复对象之前的状态。

备忘录模式是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。

在这里插入图片描述

Originator能够看到一个宽接口,允许它访问到先前状态所需的所有数据。

Memento模式适用于功能比较复杂,但是需要维护或者记录历史属性的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态。

#include <iostream> #include <string> using namespace std; // Memento类 class Memento{ public: Memento(int vik=100, int atk=100, int def=100):vik_(vik), atk_(atk), def_(atk){} int GetVik(){ return vik_; } int GetAtk(){ return atk_; } int GetDef(){ return def_; } private: int vik_; int atk_; int def_; }; // Originator类, 包含3个属性 class Originator{ public: // 初始化 void InitState(){ vik_ = 100; atk_ = 100; def_ = 100; } // 存档 Memento* CreateMemento(){ return (new Memento(vik_, atk_, def_)); } // 调档 void SetMemento(Memento *memento){ vik_ = memento->GetVik(); atk_ = memento->GetAtk(); def_ = memento->GetDef(); } // 战斗 void Fight(){ vik_ -= 50; } void show(){ cout << "当前角色的状态为\n生命值: " << vik_ << "\n攻击力: " << atk_ << "\n防御值: " << def_ << endl; } private: int vik_; // 生命值 int atk_; // 攻击 int def_; // 防御 }; // 管理者类 class Caretaker { public: Memento *memento; }; // 客户端代码 void Client(){ // 战斗之前 Originator* Role = new Originator(); Role->InitState(); Role->show(); // 存档 Caretaker *stateAdmin = new Caretaker; // 对外并不知道保存的内容 stateAdmin->memento = Role->CreateMemento(); // 战斗 Role->Fight(); Role->show(); // 调档 Role->SetMemento(stateAdmin->memento); Role->show(); delete Role; delete stateAdmin; } int main(){ Client(); return 0; } 

输出为

当前角色的状态为 生命值: 100 攻击力: 100 防御值: 100 当前角色的状态为 生命值: 50 攻击力: 100 防御值: 100 当前角色的状态为 生命值: 100 攻击力: 100 防御值: 100 
今天的文章 设计模式——备忘录模式(memento)分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-15 20:06
下一篇 2024-12-15 20:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/86919.html