博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
备忘录模式
阅读量:5011 次
发布时间:2019-06-12

本文共 1876 字,大约阅读时间需要 6 分钟。

不破坏封装的情况下,捕获一个对象的内部状况,并在对象外部保存这个状态,以后可以恢复的原先保存的状态。相当于快照

 

 

涉及角色:

1.Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。Originator可以根据需要决定Memento存储自己的哪些内部状态。
2.Memento(备忘录):负责存储Originator对象的内部状态,并可以防止Originator以外的其他对象访问备忘录。备忘录有两个接口:Caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。Originator却可看到备忘录的宽接口,允许它访问返回到先前状态所需要的所有数据。
3.Caretaker(管理者):负责保存备忘录Memento,不能对Memento的内容进行访问或者操作。
1 #include 
2 #include
3 #include
4 using namespace std; 5 6 //设计备忘录三大步骤 7 //1.设计记录的节点,存储记录,//记录鼠标,键盘的状态 8 //2.设计记录的存储,vector,list,map,set,链表,图,数组,树 9 //3.操作记录的类,记录节点状态,设置节点状态,显示状态,0.1秒记录一下10 11 12 13 14 //备忘录的节点,15 class Memo16 {17 public:18 string state;19 Memo(string state) //记录当前的状态,20 {21 this->state = state;22 }23 };24 25 class Originator//类的包含备忘录的节点26 {27 public:28 string state;29 void setMemo(Memo *memo)30 {31 state = memo->state;32 }33 Memo *createMemo()34 {35 return new Memo(state);36 }37 void show()38 {39 cout << state << endl;40 }41 };42 43 44 //备忘录的集合45 class Caretaker46 {47 public:48 vector
memo;49 void save(Memo *memo)50 {51 (this->memo).push_back(memo);52 }53 Memo *getState(int i)54 {55 56 return memo[i];57 }58 };59 60 int main()61 {62 Originator *og = new Originator();63 Caretaker *ct = new Caretaker();64 65 og->state = "on";66 og->show();67 ct->save(og->createMemo());68 69 og->state = "off";70 og->show();71 ct->save(og->createMemo());72 73 og->state = "middle";74 og->show();75 ct->save(og->createMemo());76 77 og->setMemo(ct->getState(1));78 og->show();79 80 og->setMemo(ct->getState(2));81 og->show();82 cin.get();83 return 0;84 }

 

转载于:https://www.cnblogs.com/yangrlee/p/5188250.html

你可能感兴趣的文章
pcre库之ovector[OVECCOUNT]数组的理解
查看>>
FileRegistrationHelper 为文件类型注册默认打开方式
查看>>
城市列表
查看>>
python学习 day08 (3月13日)----函数
查看>>
12: xlrd 处理Excel文件
查看>>
综合练习:词频统计
查看>>
Ubuntu 安装Guake
查看>>
中文url编码乱码问题归纳整理一
查看>>
Ruby
查看>>
安装PowerDesigner 12之后,在Microsoft Office Word 2003的模板和插件中无法移除WordToRqm.dot的解决方案...
查看>>
Daily Scrum 12.12
查看>>
Cesium应用篇:3控件(3)SelectionIndicator& InfoBox
查看>>
58. Length of Last Word(js)
查看>>
前端面试题汇总(持续更新...)
查看>>
如何成为F1车手?
查看>>
QT自定义消息
查看>>
Save (Not Permitted) Dialog Box
查看>>
装饰模式(Decorator)
查看>>
3-11
查看>>
任务13:在Core Mvc中使用Options
查看>>