java设计模式之备忘录模式

java设计模式之备忘录模式

ID:11902547

大小:52.53 KB

页数:18页

时间:2018-07-14

java设计模式之备忘录模式_第1页
java设计模式之备忘录模式_第2页
java设计模式之备忘录模式_第3页
java设计模式之备忘录模式_第4页
java设计模式之备忘录模式_第5页
资源描述:

《java设计模式之备忘录模式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、《JAVA与模式》之备忘录模式(转自博客园)http://www.cnblogs.com/java-my-life/archive/2012/06/06/2534942.html在阎宏博士的《JAVA与模式》一书中开头是这样描述备忘录(Memento)模式的:  备忘录模式又叫做快照模式(SnapshotPattern)或Token模式,是对象的行为模式。  备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这

2、个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。备忘录模式的结构  备忘录模式的结构图如下所示    备忘录模式所涉及的角色有三个:备忘录(Memento)角色、发起人(Originator)角色、负责人(Caretaker)角色。  备忘录(Memento)角色  备忘录角色又如下责任:  (1)将发起人(Originator)对象的内战状态存储起来。备忘录可以根据发起人对象的判断来决定存储多少发起人(Originator)对象的内部状态。  (2)备忘录可以保护其内容不被发起人(Originator)对象之外的任何

3、对象所读取。  备忘录有两个等效的接口:  ●  窄接口:负责人(Caretaker)对象(和其他除发起人对象之外的任何对象)看到的是备忘录的窄接口(narrowinterface),这个窄接口只允许它把备忘录对象传给其他的对象。  ●  宽接口:与负责人对象看到的窄接口相反的是,发起人对象可以看到一个宽接口(wideinterface),这个宽接口允许它读取所有的数据,以便根据这些数据恢复这个发起人对象的内部状态。  发起人(Originator)角色  发起人角色有如下责任:  (1)创建一个含有当前的内部状态的备忘录对象。  (2)使用备

4、忘录对象存储其内部状态。  负责人(Caretaker)角色  负责人角色有如下责任:  (1)负责保存备忘录对象。  (2)不检查备忘录对象的内容。 “白箱”备忘录模式的实现  备忘录角色对任何对象都提供一个接口,即宽接口,备忘录角色的内部所存储的状态就对所有对象公开。因此这个实现又叫做“白箱实现”。  “白箱”实现将发起人角色的状态存储在一个大家都看得到的地方,因此是破坏封装性的。但是通过程序员自律,同样可以在一定程度上实现模式的大部分用意。因此白箱实现仍然是有意义的。  下面给出一个示意性的“白箱实现”。    源代码  发起人角色类,发

5、起人角色利用一个新创建的备忘录对象将自己的内部状态存储起来。publicclassOriginator{privateStringstate;/***工厂方法,返回一个新的备忘录对象*/publicMementocreateMemento(){returnnewMemento(state);}/***将发起人恢复到备忘录对象所记载的状态*/publicvoidrestoreMemento(Mementomemento){this.state=memento.getState();}publicStringgetState(){returnsta

6、te;}publicvoidsetState(Stringstate){this.state=state;System.out.println("当前状态:"+this.state);}}  备忘录角色类,备忘录对象将发起人对象传入的状态存储起来。publicclassMemento{privateStringstate;publicMemento(Stringstate){this.state=state;}publicStringgetState(){returnstate;}publicvoidsetState(Stringstate){

7、this.state=state;}}  负责人角色类,负责人角色负责保存备忘录对象,但是从不修改(甚至不查看)备忘录对象的内容。publicclassCaretaker{privateMementomemento;/***备忘录的取值方法*/publicMementoretrieveMemento(){returnthis.memento;}/***备忘录的赋值方法*/publicvoidsaveMemento(Mementomemento){this.memento=memento;}}  客户端角色类publicclassClient{p

8、ublicstaticvoidmain(String[]args){Originatoro=newOriginator();Caretakerc=ne

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。