1 public class Client { 2 private static Originator o = new Originator(); 3 private static Caretaker c = new Caretaker(); 4 public static void main(String[] args) { 5 //改变发起人的对象状态 6 o.setState("On"); 7 //建立备忘录对象,并将发起人对象的状态存储起来 8 c.saveMemento(o.createMemento()); 9 //修改发起人对象的状态 10 o.setState("Off"); 11 //恢复发起人的对象状态 12 o.restoreMemento(c.retrieveMemento()); 13 System.out.println(o.getSate()); 14 } 15 } 16 //发起人角色,它用一个新建立的备忘录对象将本身的内部状态存储起来 17 class Originator{ 18 private String state; 19 //工厂方法,返还一个新的备忘录对象 20 public Memento createMemento(){ 21 return new Memento(state); 22 } 23 //将发起人恢复到备忘录对象所记载的状态 24 public void restoreMemento(Memento memento){ 25 this.state = memento.getState(); 26 } 27 //状态的取值方法 28 public String getSate(){ 29 return this.state; 30 } 31 //状态的赋值方法 32 public void setState(String state){ 33 this.state = state; 34 System.out.println("Current state =" + this.state); 35 } 36 } 37 38 //备忘录角色,它将发起人对象传入的状态存储起来,它会根据发起人对象的判断来决定将发起人的内部状态的多少存储起来 39 class Memento{ 40 private String state; 41 //构造子 42 public Memento(String state){ 43 this.state = state; 44 } 45 //状态取值方法 46 public String getState(){ 47 return this.state; 48 } 49 //状态的赋值方法 50 public void setState(String state){ 51 this.state = state; 52 } 53 } 54 //负责人角色,它负责保存备忘录对象,但不修改备忘录对象内容(一个更好实现是负责人对象根本没法从备忘录对象中读取和修改其内容) 55 class Caretaker{ 56 private Memento memento; 57 //备忘录的取值方法 58 public Memento retrieveMemento(){ 59 return this.memento; 60 } 61 //备忘录的赋值方法 62 public void saveMemento(Memento memento){ 63 this.memento = memento; 64 } 65 }
1 public class Client { 2 private static Originator o = new Originator(); 3 private static Caretaker c = new Caretaker(); 4 public static void main(String[] args) { 5 //改变发起人的对象状态 6 o.setState("On"); 7 //建立备忘录对象,并将发起人对象的状态存储起来 8 c.saveMemento(o.createMemento()); 9 //修改发起人对象的状态 10 o.setState("Off"); 11 //恢复发起人的对象状态 12 o.restoreMemento(c.retriveMemento()); 13 System.out.println(o.getState()); 14 } 15 } 16 //发起人角色,在此类中定义了一个内部的Memento类,因为此类的全部方法都是私有的,所以只有它本身和发起人(Originator)类能够调用 17 class Originator{ 18 private String state; 19 //构造 20 public Originator(){} 21 //工厂方法,返还一个新的备忘录对象 22 public MementoIF createMemento(){ 23 return new Memento(this.state); 24 } 25 //将发想人恢复到备忘录对象记录的状态 26 public void restoreMemento(MementoIF memento){ 27 Memento aMemento = (Memento)memento; 28 this.setState(aMemento.getState()); 29 } 30 //状态的取值方法 31 public String getState(){ 32 return this.state; 33 } 34 //状态的赋值方法 35 public void setState(String state){ 36 this.state = state; 37 System.out.println("state ="+ state); 38 } 39 //内部成员类,备忘录 40 protected class Memento implements MementoIF{ 41 private String savedState; 42 //构造 43 private Memento(String someState){ 44 savedState = someState; 45 } 46 //状态赋值方法 47 private void setState(String someState){ 48 savedState = someState; 49 } 50 //状态取值方法 51 private String getState(){ 52 return savedState; 53 } 54 } 55 } 56 57 //MementoIF角色只是一个标识接口,它就是窄接口,因为它是一个标识接口,因此负责人不可能改变这个备忘录对象 的内容 58 interface MementoIF{} 59 60 //负责人角色 61 class Caretaker{ 62 private MementoIF memento; 63 //备忘录的取值方法 64 public MementoIF retriveMemento(){ 65 return this.memento; 66 } 67 //备忘录的赋值方法 68 public void saveMemento(MementoIF memento){ 69 this.memento = memento; 70 } 71 }