设计模式(十八)----- 备忘录模式(Memento)----(JAVA版)

来源:互联网 发布:广州天河大数据培训 编辑:程序博客网 时间:2024/06/10 15:16

     我们平时写代码,会遇到中间有个变量要保存一下,等一会还要使用,我们可以使用一个变量把它暂时的保存起来,要使用的时候,再去使用;  当我们现在是一个对象的一个时刻的状态要暂时的保存起来,以便下次我再使用的时候呢,我们其实也是可以使用备忘录模式来把这个中间状态来保存,下次我再来使用这个状态,这其实本质也就是备份---名如其功能。

备忘录模式定义:

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


适用性:

1.必须保存一个对象在某一时刻的状态,这样以后需要时它才能恢复到先前的状态

2.如果一个用户接口来让其它的对象直接得到这些状态,将会暴露对象的实现细节并且破坏对象的封装性


参与者:

1.Memento

   备忘录存储原发器对象的内部状态

2.Originator

   原发器创建一个备忘录,用以记录当前时刻的内部状态

3.Caretaker

   负责保存好备忘录,不能对备忘录的内部进行操作或检查


一个简单的样例:

Memento

   要保存的内容,也就是原发器对象的内部状态

public class Memento {  private String state;  public Memento(String state) {    this.state = state;  }  public String getState() {    return state;  }  public void setState(String state) {     this.state = state;   }}

Originator

   要保存内容的对象,对它进行相应的处理,主要是createMemento()和setMemento(Memento menemto)

public class Originator {  private String state;  public String getState(){    return state;  }  public void setState(String state){     this.state = state;  }  public Memento createMemento(){    return new Memento(state);  }  public void setMemento(Memento menemto){    state = memento.getState();  }  public void showState(){     System.out.println(state);  }}

Caretaker

public class Caretaker{  private Memento memento;  public Memento getMemento(){    return this.memento;  }  public void setMemento(Memento memento){    this.memento = memento;  }}

Test:

public class Test{  public static void main(String[] args){    Originator org = new Originator();    org.setState("开会中");    Caretaker ctk = new Caretaker();    ctk.setMemento(org.createMemento());//将数据封装在Caretaker    org.setState("睡觉中");    org.showState();    org.setMemento(ctk.getMemento());//将数据重新导入    org.showState();}

result:

睡觉中

开会中


原创粉丝点击