Memento(备忘录)设计模式
来源:互联网 发布:拟南芥突变体数据库 编辑:程序博客网 时间:2024/05/02 01:35
声明:本博文篇幅短,适合review。
一、概念
在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
二、模式结构图
class Memento {private: string mState;public: Memento() { mState = ""; } Memento(string state){ this->mState = state; } string getState() { return mState; }};class Originator {private : string mState;public: Originator() { mState = ""; } string getState() { return mState; } void setState(string state) { this->mState = state; } Memento createMemento(){ return Memento(this->mState); } void restoreMemento(Memento memento){ this->setState(memento.getState()); }};class Caretaker {private : Memento memento;public : Memento getMemento(){ return memento; } void setMemento(Memento memento){ this->memento = memento; }};void main() { Originator originator; originator.setState("State 1"); cout<<"Init State:"<<originator.getState()<<endl; Caretaker caretaker; caretaker.setMemento(originator.createMemento()); originator.setState("State 2"); cout<<"Changed State:"<<originator.getState()<<endl; originator.restoreMemento(caretaker.getMemento()); cout<<"Restore State:"<<originator.getState()<<endl;}
三、例子
class Save {private: int mHealthy; int mAttack; public: Save(int healthy, int attack): mHealthy(healthy),mAttack(attack) {} int getHealthy(){ return mHealthy; } int getAttack(){ return mAttack; }};class GameRole {private: int mHealthy; int mAttack; public: GameRole(): mHealthy(100),mAttack(80) {} Save createSave() { return Save(mHealthy, mAttack); } void loadSave(Save save) { mHealthy = save.getHealthy(); mAttack = save.getAttack(); } void show() { cout<<"Healthy : "<< mHealthy<<", Attack : "<< mAttack<<endl; } void fight() { mHealthy -= 10; mAttack -= 10; }};class SaveManager {public: void saveOne(Save save) { mVec.push_back(save); } Save loadOne(int index) { return mVec[index]; }private: vector<Save> mVec;};void main(){ SaveManager sm; GameRole role; role.show(); //初始值 sm.saveOne(role.createSave()); //保存状态 role.fight(); role.show(); //进攻后 role.loadSave(sm.loadOne(0)); //载入状态 role.show(); //恢复到初始值}
四、优缺点
1、优点
a、当发起人角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态复原。
b、简化了发起人类,发起人不再需要管理和保存其内部状态的一个个版本。
c、把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。
2、缺点
a、如果备份的对象存在大量的信息或者创建、恢复操作非常频繁,则可能造成很大的性能开销。
1 0
- Memento(备忘录)设计模式
- 设计模式----Memento(备忘录)模式
- 设计模式--备忘录模式(Memento)
- [设计模式]memento备忘录模式
- [设计模式]备忘录模式(Memento)
- 设计模式之Memento(备忘录)
- 设计模式----Memento(备忘录)
- 设计模式学习-Memento(备忘录)
- 设计模式(13)-备忘录模式(Memento)
- Java设计模式-----Memento备忘录模式
- 设计模式—Memento备忘录模式
- 设计模式23:Memento Pattern (备忘录模式)
- 设计模式(15)-备忘录模式(Memento)
- 设计模式读书笔记之备忘录模式(Memento)
- 设计模式之备忘录模式Memento
- Java设计模式-----Memento备忘录模式
- 设计模式之备忘录模式(Memento Pattern)
- 设计模式——备忘录模式(Memento)
- java中Vector的用法是什么?
- Android多屏幕自适应解决方案
- c语言测试程序执行时间
- nginx介绍,流量及并发连接数限制,访问控制及ddos预防
- Qt中 QString 和int,double等的转换
- Memento(备忘录)设计模式
- 检测设备是否支持Google Play服务
- NLP python widely used toolkits
- 侧滑手势ios 关于interactivePopGestureRecognizer
- Activiti进阶(一)——HelloWorld
- 隐藏cell
- C++学习之模板编程:可变参数模板
- JEECG 社区开源项目下载(总览)
- HTML5拖拽总结