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

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

备忘录模式定义:

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


适用性:

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:

睡觉中

开会中


你可能感兴趣的:(设计模式(JAVA版本))