备忘录(Memento Pattern)模式q.doc

上传人:cn****1 文档编号:558248717 上传时间:2023-12-17 格式:DOC 页数:14 大小:135.50KB
返回 下载 相关 举报
备忘录(Memento Pattern)模式q.doc_第1页
第1页 / 共14页
备忘录(Memento Pattern)模式q.doc_第2页
第2页 / 共14页
备忘录(Memento Pattern)模式q.doc_第3页
第3页 / 共14页
备忘录(Memento Pattern)模式q.doc_第4页
第4页 / 共14页
备忘录(Memento Pattern)模式q.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《备忘录(Memento Pattern)模式q.doc》由会员分享,可在线阅读,更多相关《备忘录(Memento Pattern)模式q.doc(14页珍藏版)》请在金锄头文库上搜索。

1、备忘录(Memento Pattern)模式 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化 存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。 常见的软件系统往往不止存储一个状态,而是需要存储多个状态。这些状态常常是一个对象历史发展的不同阶段的快照,存储这些快照的备忘录对象 叫做此对象的历史,某一个快照所处的位置叫做检查点。 备忘录角色: 备忘录角色有

2、如下的责任。 1、将发起人(Originator)对象的内部状态存储起来,备忘录可以根据发起人对象的判断来决定存储多少 发起人(Originator)对象的内部状态。 2、备忘录可以保护其内容不被发起人对象之外的任何对象所读取。备忘录有两个等效的接口: 1、窄接口:负责人(Caretaker)对象(和其他除发起人对象之外的任何对象)看到的是备忘录的窄 接(narrow interface),这个窄接口只允许它把备忘录对象传给其他的对象; 2、宽接口:与负责人对象看到的窄接口相反的是,发起人对象可以看到一个宽接口(wide interface), 这个宽接口允许它读取所有的数据,以便根据数据恢复

3、这个发起人对象的内部状态。853P 发起人角色: 发起人角色有如下责任: 1、创建一个含有当前的内部状态的备忘录对象。 2、使用备忘录对象存储其内部状态。 负责人角色: 负责人角色有如下的责任: 1、负责保存备忘录对象 2、不检查备忘录对象的内容。Java代码 1. 宽接口和白箱: 2. 发起人角色 3. publicclassOriginator 4. privateStringstate; 5. 6. /工厂方法,返还一个新的备忘录对象 7. publicMementocreateMemento() 8. returnnewMemento(state); 9. 10. 11. /将发起人恢

4、复到备忘录对象所记载的状态 12. publicvoidrestoreMemento(Mementomemento) 13. this.state=memento.getState(); 14. 15. 16. /状态的取值方法 17. publicStringgetState() 18. returnthis.state; 19. 20. 21. /状态的赋值方法 22. publicvoidsetState(Stringstate) 23. this.state=state; 24. System.out.println(Currentstate=+this.state); 25. 26.

5、 27. 28. 备忘录模式要求备忘录对象提供两个不同的接口:一个宽接口提供给发起人对象,另一个窄接口提供给所有其他的对象,包括负责人对象。 29. 宽接口允许发起人读取到所有的数据;窄接口只允许它把备忘录对象传给其他的对象而看不到内部的数据。 30. /备忘录角色 31. publicclassMemento 32. privateStringstate; 33. 34. publicMemento(Stringstate) 35. this.state=state; 36. 37. 38. publicStringgetState() 39. returnthis.state; 40. 4

6、1. 42. publicvoidsetState(Stringstate) 43. this.state=state; 44. 45. 46. 47. 负责人角色负责保存备忘录对象,但是从不修改(甚至不查看)备忘录对象的内容(一个更好的实现是负责人对象根本无法从备忘录 48. 对象中读取个修改其内容) 49. 50. /负责人角色 51. publicclassCaretaker 52. privateMementomemento; 53. 54. /备忘录的取值方法 55. publicMementoretrieveMemento() 56. returnthis.memento; 57.

7、 58. 59. /备忘录的赋值方法 60. publicvoidsaveMemento(Mementomemento) 61. this.memento=memento; 62. 63. 64. 65. /客户端 66. publicclassClient 67. privatestaticOriginatoro=newOriginator(); 68. privatestaticCaretakerc=newCaretaker(); 69. privatestaticvoidmain(Stringargs) 70. /该负责人对象的状态 71. o.setState(On); 72. /创建

8、备忘录对象,并将发起人对象的状态存储起来 73. c.saveMemento(o.createMemento(); 74. /修改发起人对象的状态 75. o.setState(Off); 76. /恢复发起人对象的状态 77. o.restoreMemento(c.retrieveMemento(); 78. 79. 80. 首先将发起人对象的状态设置成“On”(或者任何有效状态),并且创建一个备忘录对象将这个状态存储起来;然后将发起人对象 81. 的状态改成“Off”(或者任何状态);最后又将发起人对象恢复到备忘录对象所存储起来的状态,即“On”状态(或者先前所 82. 存储的任何状态)

9、83. 84. 备忘录系统运行的时序是这样的: 85. (1)将发起人对象的状态设置成“On”。 86. (2)调用发起人角色的createMemento()方法,创建一个备忘录对象将这个状态存储起来。 87. (3)将备忘录对象存储到负责人对象中去。 88. 备忘录系统恢复的时序是这样的: 89. (1)将发起人对象的状态设置成“Off”; 90. (2)将备忘录对象从负责人对象中取出; 91. (3)将发起人对象恢复到备忘录对象所存储起来的状态,“On”状态。 92. 93. 白箱实现的优缺点 94. 白箱实现的一个明显的好处是比较简单,因此常常用做教学目的。白箱实现的一个明显的缺点是破坏

10、对发起人状态的封装。 95. 96. 窄接口或者黑箱实现 97. /发起人角色 98. publicclassOriginator 99. privateStringstate; 100. 101. publicOriginator() 102. 103. 104. /工厂方法,返还一个新的备忘录对象 105. publicMementoIFcreateMemento() 106. returnnewMemento(this.state); 107. 108. 109. /将发起人恢复到备忘录对象记录的状态 110. publicvoidrestoreMemento(MementoIFmemento) 111. MementoaM

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号