备忘录Memento Pattern模式q文档格式.docx

上传人:b****3 文档编号:17864768 上传时间:2022-12-11 格式:DOCX 页数:28 大小:30.45KB
下载 相关 举报
备忘录Memento Pattern模式q文档格式.docx_第1页
第1页 / 共28页
备忘录Memento Pattern模式q文档格式.docx_第2页
第2页 / 共28页
备忘录Memento Pattern模式q文档格式.docx_第3页
第3页 / 共28页
备忘录Memento Pattern模式q文档格式.docx_第4页
第4页 / 共28页
备忘录Memento Pattern模式q文档格式.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

备忘录Memento Pattern模式q文档格式.docx

《备忘录Memento Pattern模式q文档格式.docx》由会员分享,可在线阅读,更多相关《备忘录Memento Pattern模式q文档格式.docx(28页珍藏版)》请在冰豆网上搜索。

备忘录Memento Pattern模式q文档格式.docx

private 

String 

state;

5. 

6. 

//工厂方法,返还一个新的备忘录对象 

7. 

Memento 

createMemento(){ 

8. 

return 

new 

Memento(state);

9. 

10. 

11. 

//将发起人恢复到备忘录对象所记载的状态 

12. 

void 

restoreMemento(Memento 

memento){ 

13. 

this.state 

memento.getState();

14. 

15. 

16. 

//状态的取值方法 

17. 

getState(){ 

18. 

this.state;

19. 

20. 

21. 

//状态的赋值方法 

22. 

setState(String 

state){ 

23. 

24. 

System.out.println("

Current 

state 

"

this.state);

25. 

26. 

27. 

28. 

备忘录模式要求备忘录对象提供两个不同的接口:

一个宽接口提供给发起人对象,另一个窄接口提供给所有其他的对象,包括负责人对象。

29. 

宽接口允许发起人读取到所有的数据;

窄接口只允许它把备忘录对象传给其他的对象而看不到内部的数据。

30. 

//备忘录角色 

31. 

Memento{ 

32. 

33. 

34. 

Memento(String 

35. 

36. 

37. 

38. 

39. 

40. 

41. 

42. 

43. 

44. 

45. 

46. 

47. 

负责人角色负责保存备忘录对象,但是从不修改(甚至不查看)备忘录对象的内容(一个更好的实现是负责人对象根本无法从备忘录 

48. 

对象中读取个修改其内容) 

49. 

50. 

//负责人角色 

51. 

Caretaker{ 

52. 

memento;

53. 

54. 

//备忘录的取值方法 

55. 

retrieveMemento(){ 

56. 

this.memento;

57. 

58. 

59. 

//备忘录的赋值方法 

60. 

saveMemento(Memento 

61. 

this.memento 

62. 

63. 

64. 

65. 

//客户端 

66. 

Client{ 

67. 

static 

Originator 

Originator();

68. 

Caretaker 

c= 

Caretaker();

69. 

main(String[] 

args){ 

70. 

//该负责人对象的状态 

71. 

o.setState("

On"

);

72. 

//创建备忘录对象,并将发起人对象的状态存储起来 

73. 

c.saveMemento(o.createMemento());

74. 

//修改发起人对象的状态 

75. 

Off"

76. 

//恢复发起人对象的状态 

77. 

o.restoreMemento(c.retrieveMemento());

78. 

79. 

80. 

首先将发起人对象的状态设置成“On”(或者任何有效状态),并且创建一个备忘录对象将这个状态存储起来;

然后将发起人对象 

81. 

的状态改成“Off”(或者任何状态);

最后又将发起人对象恢复到备忘录对象所存储起来的状态,即“On”状态(或者先前所 

82. 

存储的任何状态) 

83. 

84. 

备忘录系统运行的时序是这样的:

85. 

(1)将发起人对象的状态设置成“On”。

86. 

(2)调用发起人角色的createMemento()方法,创建一个备忘录对象将这个状态存储起来。

87. 

(3)将备忘录对象存储到负责人对象中去。

88. 

备忘录系统恢复的时序是这样的:

89. 

(1)将发起人对象的状态设置成“Off”;

90. 

(2)将备忘录对象从负责人对象中取出;

91. 

(3)将发起人对象恢复到备忘录对象所存储起来的状态,“On”状态。

92. 

93. 

白箱实现的优缺点 

94. 

白箱实现的一个明显的好处是比较简单,因此常常用做教学目的。

白箱实现的一个明显的缺点是破坏对发起人状态的封装。

95. 

96. 

窄接口或者黑箱实现 

97. 

//发起人角色 

98. 

99. 

100. 

101. 

Originator(){ 

102. 

103. 

104. 

105. 

MementoIF 

106. 

Memento(this.state);

107. 

108. 

109. 

//将发起人恢复到备忘录对象记录的状态 

110. 

restoreMemento(MementoIF 

111. 

aMemento 

(Memento)memento;

112. 

this.setState(aMemento.getState());

113. 

114. 

115. 

116. 

117. 

118. 

119. 

setState(){ 

120. 

121. 

state);

122. 

123. 

124. 

protected 

implements 

MementoIF{ 

125. 

savedState;

126. 

Mememto(String 

someState){ 

127. 

savedState 

someState;

128. 

129. 

130. 

131. 

132. 

133. 

134. 

135. 

136. 

137. 

138. 

139. 

140. 

interface 

MementoIF{} 

141. 

142. 

143. 

144. 

145. 

146. 

147. 

148. 

149. 

saveMemento(MementoIF 

150. 

151. 

152. 

153. 

154. 

155. 

156. 

157. 

158. 

main(String 

args[]){ 

159. 

//改变负责人对象的状态 

160. 

161. 

162. 

163. 

164. 

165. 

166. 

167. 

168. 

169. 

170. 

黑箱实现运行时的时序为;

171. 

172. 

(2)调用发起人角色的 

createMemento()方法,创建一个备忘录对象将这个状态存储起来。

173. 

由于负责人对象拿到的仅是 

MementoIF类型,因此无法读出备忘录内部的状态。

174. 

恢复时的时序为:

175. 

176. 

(2)将备忘录对象从负责人对象中取出。

注意此时仅能得到 

MementoIF接口,因此无法读出此对象的内部状态 

177. 

(3)将发起人对象的状态恢复成备忘录对象所存储起来的状态,,由于发起人对象的内部类Memento实现了MementoIF接口 

178. 

这个内部类是传入的备忘录对象的真实类型,因此发起人对象可以利用内部类Memento 

的私有 

接口读出此对象的内部状态 

179. 

180.存储多个状态的备忘录模式:

181. 

182. 

import 

java.util.Vector;

183. 

java.util.Enumeration;

184. 

185. 

186. 

Vector 

states;

187. 

int 

index;

188. 

189. 

190. 

states 

Vector();

191. 

index 

0;

192. 

193. 

194. 

createMementor(){ 

195. 

Mementor(states,index);

196. 

197. 

198. 

restoreMementor(Mementor 

199. 

memento.getStates();

200. 

memento.getIndex();

201. 

202. 

203. 

204. 

this.states.addElement(state);

205. 

++;

206. 

207. 

208. 

//辅助方法,打印出所有的状态 

209. 

printStates(){ 

210. 

Total 

number 

of 

states:

index);

211. 

for(Enumeration 

states.elements();

e.hasMoreElements();

){ 

212. 

system.out.println(e.nextElement());

213. 

214. 

215. 

216. 

217. 

218. 

219. 

220. 

221. 

222. 

223. 

224. 

Memento(Vector 

states,int 

index){ 

225. 

this.states 

(Vector)states.clone();

226. 

this.index 

227. 

228. 

229. 

//状态取值方法 

230. 

getStates(){ 

231. 

232. 

233. 

234. 

//检查点取值方法 

235. 

get

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1