我所理解的设计模式(C++实现)——备忘录模式(Memento Pattern)
2013-08-04 10:23
656 查看
概述:
我们玩单机游戏的时候总会遇到老婆大人的各位事情,一会去买瓶醋了,一会去打个酱油了,会耽误我们玩游戏的进程,但是此时我们能有“保存游戏”这个宝贝,我们的主基地不会在我们打酱油的时候被对手拆掉。这“保存游戏”的功能其实就是备忘录模式的很好应用,她是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以就该对象恢复到原先保存的状态。这个其实也是我们的redo,undo所采用的模式。
类图和实例:
简单的模式实例:
#include <iostream> #include <string> using namespace std; class Memento { private: string state; public: Memento() { state = ""; } Memento(string state){ this->state = state; } string getState() { return state; } void setState(string state) { this->state = state; } }; class Originator { private : string state; public: Originator() { state = ""; } string getState() { return state; } void setState(string state) { this->state = state; } Memento createMemento(){ return Memento(this->state); } 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; } }; int main (int argc, char *argv[]) { Originator originator; originator.setState("状态1"); cout<<"初始状态:"<<originator.getState()<<endl; Caretaker caretaker; caretaker.setMemento(originator.createMemento()); originator.setState("状态2"); cout<<"改变后状态:"<<originator.getState()<<endl; originator.restoreMemento(caretaker.getMemento()); cout<<"恢复后状态:"<<originator.getState()<<endl; }
适用性:
适用于功能比较复杂的,但需要记录或维护属性历史的类;或者需要保存的属性只是众多属性中的一小部分时Originator可以根据保存的Memo还原到前一状态。优缺点:
优点:1)当发起人角色的状态有改变时,有可能是个错误的改变,我们使用备忘录模式就可以把这个错误改变还原。
2)备份的状态是保存在发起人角色之外的,这样,发起人角色就不需要对各个备份的状态进行管理。
缺点:
1)如果备份的对象存在大量的信息或者创建、恢复操作非常频繁,则可能造成很大的性能开销。
LCL_data原创于CSDN.NET【http://blog.csdn.net/lcl_data/article/details/9745019】
其他设计模式文章请参考:我所理解的设计模式
相关文章推荐
- 我所理解的设计模式(C++实现)——备忘录模式(Memento Pattern)
- 我所理解的设计模式(C++实现)——备忘录模式(Memento Pattern)
- 设计模式系列4-----C++实现备忘录模式(Memento Pattern)
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- 我所理解的设计模式(C++实现)——访问者模式(Visitor Pattern)
- 我所理解的设计模式(C++实现)——享元模式(Flyweight Pattern)
- 我所理解的设计模式(C++实现)——建造者模式(Builder Pattern)
- 极速理解设计模式系列:19.备忘录模式(Memento Pattern)
- 我所理解的设计模式(C++实现)——责任链模式(Chain Of Responsibility Pattern)
- 设计模式---备忘录模式(C++实现)
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern) (转)
- 我所理解的设计模式(C++实现)——外观模式(Facade Pattern)
- 极速理解设计模式系列:19.备忘录模式(Memento Pattern) 推荐
- 我所理解的设计模式(C++实现)——解释器模式(Interpreter Pattern)
- 设计模式C++实现(6)——备忘录模式
- 我所理解的设计模式(C++实现)——适配器模式(Adapter Pattern)
- 我所理解的设计模式(C++实现)——装饰者模式(Decorator Pattern)
- 我所理解的设计模式(C++实现)——中介者模式(Mediator Pattern)
- 我所理解的设计模式(C++实现)——命令模式(Command Pattern)
- 设计模式之备忘录模式(C++实现)