【设计模式】备忘录模式(以电影明日边缘为例)
2014-08-19 00:52
183 查看
[b]1、说明[/b]
备忘录(Memento): 在不破坏封装性的前提下,捕获一个对象的内部装填,并在对象之外保存这个状态。 这样以后就可以将该对象恢复到原先保存的状态。
三个要素:【发起者】 【备忘录】 【管理者】
[b]2、demo [/b]
电影明日边缘,阿汤哥被将军阁下扔到战场上,阿汤哥慢慢从基地
醒来,迷迷糊糊到看见军队到处在走,头昏混沉沉到,后来阿汤哥
还是被扔到里战场上, 可是阿汤哥每次挂掉以后都能从基地醒来
那阵开始,因此种就相当于游戏里到备忘录,自动读档。
【发起者】 阿汤哥
【备忘录】 阿汤哥读档时的状态
【管理者】 导演
[b]3、上代码[/b]
[b]4、编译[/b]
g++ main.cpp -o main.out
[b]5、执行[/b]
[b]./main.out[/b]
备忘录(Memento): 在不破坏封装性的前提下,捕获一个对象的内部装填,并在对象之外保存这个状态。 这样以后就可以将该对象恢复到原先保存的状态。
三个要素:【发起者】 【备忘录】 【管理者】
[b]2、demo [/b]
电影明日边缘,阿汤哥被将军阁下扔到战场上,阿汤哥慢慢从基地
醒来,迷迷糊糊到看见军队到处在走,头昏混沉沉到,后来阿汤哥
还是被扔到里战场上, 可是阿汤哥每次挂掉以后都能从基地醒来
那阵开始,因此种就相当于游戏里到备忘录,自动读档。
【发起者】 阿汤哥
【备忘录】 阿汤哥读档时的状态
【管理者】 导演
[b]3、上代码[/b]
#include <iostream> using std::cout; using std::endl; /******************************************************* 设计模式 备忘录模式 三个要素:【发起者】 【备忘录】 【管理者】 小例: 电影明日边缘,阿汤哥被将军阁下扔到战场上,阿汤哥慢慢从基地 醒来,迷迷糊糊到看见军队到处在走,头昏混沉沉到,后来阿汤哥 还是被扔到里战场上, 可是阿汤哥每次挂掉以后都能从基地醒来 那阵开始,因此种就相当于游戏里到备忘录,自动读档。 【发起者】 阿汤哥 【备忘录】 阿汤哥读档时的状态 【管理者】 导演 *********************************************************/ static char* pState = "慢慢醒来"; static char* pBehaivor = "扶着头慢慢坐起来"; //备忘录 class CMemento { public: CMemento(char* pState, char* pBehaivor) : m_pState(pState), m_pBehaivor(pBehaivor){} virtual ~CMemento(){} char* GetState() const {return m_pState;} char* GetBehaivor() const {return m_pBehaivor;} protected: char* m_pState; char* m_pBehaivor; }; //阿汤哥 class CTom { public: CTom(char* pState = 0, char* pBehaivor = 0, CMemento* pMemento = 0) : m_pState(pState), m_pBehaivor(pBehaivor), m_pMemento(pMemento){} virtual ~CTom(){} CMemento* CreateMemento() { return new CMemento(m_pState, m_pBehaivor); } void SetMemento(CMemento* pMemento) {m_pState = pMemento->GetState(); m_pBehaivor = pMemento->GetBehaivor();} void Show() const { cout << "\nState is " << m_pState << ", Behaivor is " << m_pBehaivor << " \n";} void SetEnv(char* pState, char* pBehaivor) { m_pState = pState; m_pBehaivor = pBehaivor; } protected: char* m_pState; char* m_pBehaivor; CMemento* m_pMemento; }; //管理者 class CCaretaker { public: CCaretaker() : m_pMemento(0){} virtual ~CCaretaker(){} CMemento* GetMemento() const { return m_pMemento;} void SetMemento(CMemento* pMemento) { m_pMemento = pMemento; } protected: CMemento* m_pMemento; }; int main() { //state:慢慢醒来 behaivor:扶着头慢慢坐起来 CTom tom(pState, pBehaivor); tom.Show(); cout << endl; //管理者,保存当前状态 CCaretaker* pCaretaker = new CCaretaker(); pCaretaker->SetMemento(tom.CreateMemento()); //改变阿汤哥当前状态 tom.SetEnv("啊 阿汤哥中枪里", "阿汤哥昏迷倒下了"); tom.Show(); cout << "---------------说明:阿汤哥要读档了!-------------" << endl; //恢复阿汤哥之前状态 tom.SetMemento(pCaretaker->GetMemento()); tom.Show(); cout << endl; return 0; }
[b]4、编译[/b]
g++ main.cpp -o main.out
[b]5、执行[/b]
[b]./main.out[/b]
相关文章推荐
- 【设计模式】备忘录模式(以电影明日边缘为例)
- 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)
- 设计模式C++实现(12)——备忘录模式
- java 设计模式 行为模式 -Memento(备忘录模式)
- 设计模式C++实现(12)——备忘录模式
- 设计模式之(十八)备忘录模式(memento)
- 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)
- 设计模式利剑18--备忘录模式
- 设计模式笔记(21)---备忘录模式(行为型)
- [php]php设计模式 Memento (备忘录模式)
- [设计模式]Memento pattern(备忘录模式)在Paint.net中的应用
- 设计模式--备忘录模式(Memento)
- 设计模式(13)-备忘录模式(Memento)
- Net设计模式实例之备忘录模式(Memento Pattern)
- 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)
- 设计模式——备忘录模式(Memento)
- 设计模式--备忘录模式(Memento)
- 设计模式 - Memento 模式(备忘录模式)
- 23种设计模式之备忘录模式(Memento)
- 设计模式(15)-备忘录模式(Memento)