设计模式之备忘录模式

来源:互联网 发布:网络兼职业务员 编辑:程序博客网 时间:2024/05/21 18:36

 备忘录模式

1. 备忘录模式:

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

2. 备忘录模式解析:

适用场合?

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

 

缺点:

角色状态需要完整存储到备忘录对象中,如果状态数据很大很多,那么在资源消耗上,备忘录对象会非常耗内存。

3. 备忘录模式的例子:

#include <iostream>#include <string>#include <vector>using namespace std;class Memo//备忘录,负责存储Originator对象的内部状态{public:string state;Memo(string state){this->state=state;}};class Originator//发起人,负责创建一个备忘录{public:string state; //需要保存的属性,可能有几个void setMemo(Memo *memo)//恢复备忘录{state=memo->state;}Memo *createMemo()//创建备忘录,将需要保存的信息导入{return new Memo(state);}void show(){cout<<state<<endl;}};class Caretaker//管理者,负责保存备忘录{public:vector<Memo *> memo;void save(Memo *memo){(this->memo).push_back(memo);}Memo *getState(int i){return memo[i];}}; int main(){Originator *og=new Originator();Caretaker *ct=new Caretaker(); og->state="on";og->show();ct->save(og->createMemo());og->state="off";og->show();ct->save(og->createMemo());og->state="middle";og->show();ct->save(og->createMemo());og->setMemo( ct->getState(2) );og->show();return 0;}


原创粉丝点击