备忘录模式

Posted lixianyuan-org

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了备忘录模式相关的知识,希望对你有一定的参考价值。

  备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。

  备忘录模式应用场景:Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的只是众多属性中的一小部分时,Originator(发起人)可以根据保存的Memento信息还原到前一状态。一些对象的内部信息必须要存在对象以外的地府,但是必须要由对象自己读取,这时,使用备忘录可以把复杂的对象内部信息对其他的对象屏蔽起来,从而可以且当地保持封装的边界。
     感觉最大的作用还是在当角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将这个状态复原。

 

Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻他的内部状态,并可使用备忘录回复内部状态。Originator可根据需要决定Memento存储Originator的哪些内部状态。

 1 /**
 2  * 发起人Originator类
 3  * @author 贤元
 4  *
 5  */
 6 public class Originator {
 7     //需要保存的属性,可能有多个
 8     private String state;
 9     
10     //创建备忘录,将当前需要保存的信息导入并实例化出一个Memento对象。
11     public Memento createMemento(){
12         return new Memento(state);
13     }
14     
15     //恢复备忘录,将Memento导入并将相关数据恢复
16     public void setMemento(Memento memento){
17         state = memento.getState();
18     }
19     
20     //显示数据
21     public void show(){
22         System.out.println("state="+state);
23     }
24     
25     
26     
27     public String getState() {
28         return state;
29     }
30 
31     public void setState(String state) {
32         this.state = state;
33     }
34     
35     
36 }

 

Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento。备忘录有两个接口,Caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。Originator能够看到一个宽接口,允许它访问返回到先前状态所需的所有数据。

 1 //备忘录memento类
 2 public class Memento {
 3     private String state;
 4     
 5     //构造方法,将相关数据导入
 6     public Memento(String state){
 7         this.state = state;
 8     }
 9 
10     //需要保存的数据属性,可以是多个
11     public String getState() {
12         return state;
13     }
14     
15     
16 }

 

Caretaker(管理者):负责保存好备忘录Memento,不能对备忘录的内容进行操作或检查。

 1 //管理者
 2 public class Caretaker {
 3     private Memento memento;
 4 
 5     //得到备忘录
 6     public Memento getMemento() {
 7         return memento;
 8     }
 9     //设置备忘录
10     public void setMemento(Memento memento) {
11         this.memento = memento;
12     }
13     //在备忘录中存发起人的原始数据。通过管理者将备忘录中的数据给发起人,从而将发起人恢复到原始状态。
14 }

 

UML图:

  技术分享图片

 


以上是关于备忘录模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式备忘录模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

(十三)备忘录模式-代码实现

19-备忘录(Memento)模式Ruby实现

设计模式----备忘录模式

设计模式14:备忘录模式

设计模式之备忘录模式