备忘录模式及C++实现
2014-05-27 22:12
309 查看
一,理论学习: 1.什么是备忘录模式? GoF《设计模式》中对备忘录模式的定义是这样的:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态! 世界上本没有后悔药,但是我们在进行软件系统设计的时候要给用户后悔的权利,提供用户后悔药!备忘录模式顾名思义就是将一个对象某个时候的状态备个份,当用户后面需要返回这个状态时就可以把备份调出来用! 2.备忘录模式涉及的角色: 2.1 originator(发起人):负责创建一个备忘录memento,用以记录当前时刻自身的内部状态,并可以使用备忘录恢复内部状态。originator可以根据需要决定memento储存自己的哪些内部状态。 2.2 memento(备忘录):负责存储originator对象的内部状态,并可以防止originator以外的其他对象访问备忘录。 2.3 caretaker(管理者):负责管理备忘录memento,但不能memento的内容进行访问或者操作(原因如上面2.2)。 3.代码实现说明: 实现备忘录模式的关键就是friend class Word_Input,memento的接口都声明为private(构造函数除外),而将 Word_Input声明为memento的友元类,为的就是防止 Word_Input以外的其他对象访问memento!也就达到了封密的效果!也即定义中所说的不破坏封闭! 4.备忘录模式的使用场合: 当你需要让对象返回之前的状态时,就使用备忘录模式! 二,备忘录模式C++代码实现:
#include<iostream> #include<string> using namespace std; class Word_Input; class Memento { public: Memento(string m_word) :word(m_word){} private: friend class Word_Input; string GetWords() { return word; } string word; }; class Word_Input { public: Word_Input(string myword) :word(myword){} //存档 Memento*SaveWords() { return new Memento(word); } //恢复存档 void RecycleWords(Memento*pword) { word = pword->GetWords(); cout << "Good! 坚持最初的想法!你最初的想法是这样滴:" << endl; } //输出文字 void ShowWords() { cout << word << endl << endl; } private: string word; }; class Caretake { public: void SetMemento(Memento*m_pmemento) { Pmemento = m_pmemento; } Memento* GetMemento() { return Pmemento; } private: Memento*Pmemento; }; int main(void) { Word_Input*wi_1 = new Word_Input("我对自己说我要努力学习设计模式!"); wi_1->ShowWords();//显示初始状态 //存档 Caretake*ct = new Caretake; ct->SetMemento(wi_1->SaveWords()); //建立新的状态 Word_Input*wi_2 = new Word_Input("后来随着学习的深入,我的想法发生了改变,设计模式太抽象太难了!"); wi_2->ShowWords();//显示新的状态 Word_Input*wi_3 = new Word_Input("但是.....我不想以后做只会搬砖的码农,所以我要坚持最初的想法!"); wi_3->ShowWords();//显示新的状态 int choise; cout << "请输入你的选择:1.放弃 2.坚持最初的想法" << endl; cout << "你的选择是:"; cin >> choise; switch (choise) { case 1: cout << "你就这点出息!" << endl; break; case 2: wi_1->RecycleWords(ct->GetMemento());//读取存档,坚持最初的想法 wi_1->ShowWords(); break; default:cout << "你输入的选项有误!" << endl; } delete wi_1; delete wi_2; delete wi_3; delete ct; system("pause"); return 0; }
<strong>运行结果截图:</strong>
[/code]
相关文章推荐
- 设计模式C++实现(12)——备忘录模式
- 大话设计模式C++实现-第18章-备忘录模式
- 备忘录模式之C++实现
- 备忘录模式 C++实现
- 设计模式C++实现(12)——备忘录模式
- 设计模式C++实现(12)——备忘录模式2
- 设计模式C++实现(12)——备忘录模式
- 设计模式C++实现(12)——备忘录模式
- 设计模式C++实现(12)——备忘录模式
- 备忘录模式-c++实现
- 设计模式C++实现--备忘录模式
- 设计模式C++实现(12)——备忘录模式
- 备忘录模式的c++代码实现
- 备忘录模式-----C++实现
- C++实现备忘录模式
- 备忘录模式之C++实现
- 常见设计模式的解析和实现(C++)之十七-State模式
- 常见设计模式的解析和实现(C++)之十八-Iterator模式
- 常见设计模式的解析和实现(C++)之十九-Memento模式
- 常见设计模式的解析和实现(C++)之十六-Strategy模式