设计模式之备忘录模式

来源:互联网 发布:单片机电源模块电路图 编辑:程序博客网 时间:2024/06/06 19:05

定义:
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态
备忘录模式的结构
发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。
备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。
管理角色:对备忘录进行管理,保存和提供备忘录。
通用代码:
发起者代码:

class Originator {      private String state = "";        public String getState() {          return state;      }      public void setState(String state) {          this.state = state;      }      public Memento createMemento(){          return new Memento(this.state);      }      public void restoreMemento(Memento memento){          this.setState(memento.getState());      }  }  

备忘录代码:

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;      }  }

管理角色代码:

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

客户端测试代码:

public class Client {      public static void main(String[] args){          Originator originator = new Originator();          originator.setState("状态1");          System.out.println("初始状态:"+originator.getState());          Caretaker caretaker = new Caretaker();          caretaker.setMemento(originator.createMemento());          originator.setState("状态2");          System.out.println("改变后状态:"+originator.getState());          originator.restoreMemento(caretaker.getMemento());          System.out.println("恢复后状态:"+originator.getState());      }  }  

上面代码的逻辑很简单,就是通过一个对象保存一个需要备份的状态信息,然后再另一个类中通过这个对象在需要的时候得到这个备份信息。
即使在实际应用中也是这个框架来使用的,只不过逻辑可能要更加的复杂一些,例如可能是多个状态的备份这个时候可以使用bean的方式来备份。

0 0
原创粉丝点击