备忘录模式(Memento)
@@@模式定义:
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
这样以后就可以将该对象恢复到原先保存的状态。
@@@练习示例:
仿真系统
@@@示例代码:
\pattern\FlowAMockMemento.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package user;import pattern.FlowAMementoCareTaker;import pattern.FlowAMock;import pattern.FlowAMockMemento;public class Client {public static void main(String[] args) { // 创建模拟运行流程的对象FlowAMock mock = new FlowAMock("TestFlow");// 运行流程的第一个阶段mock.runPhaseOne();// 创建一个管理者FlowAMementoCareTaker careTaker = new FlowAMementoCareTaker();// 创建此时对象的备忘录对象,并保存到管理者对象那里,后面要用FlowAMockMemento memento = mock.createMemento();careTaker.saveMemento(memento);// 按照方案一来运行流程的后半部分mock.schema1();// 从管理者获取备忘录对象,然后设置回去// 让模拟运行流程的对象自己恢复自己的内部状态mock.setMemento(careTaker.retriveMemento());// mock.setMemento(memento);// 按照方案二来运行流程的后半部分mock.schema2();}}
@@@模式的实现:
引入一个存储状态的备忘录对象,让它作为原发器的私有内部类。
引入一个备忘录对象的窄接口,和外部通信。
@@@模式的优点:
(1)更好的封装性;
(2)简化了原发器;
@@@模式的缺点:
可能会导致高开销;
@@@模式的本质:
保存和恢复内部状态。
@@@模式体现的设计原则:
NA