备忘录模式

来源:互联网 发布:电子烟发热丝数据 编辑:程序博客网 时间:2024/05/16 02:35
#include <iostream>#include <string>#include <vector>using namespace std;class Memo{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;}

GOOD:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外 保存这个状态,这样就可以将以后的对象状态恢复到先前保存的状态。
适用于功能比较复杂的,但需要记录或维护属性历史的类;或者需要保存的属性只是众 多属性中的一小部分时 Originator 可以根据保存的 Memo 还原到前一状态。

0 0
原创粉丝点击