需要跟进多重检查点。
1.用意
又叫快照模式或Token模式。
备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。
2.类图
白箱实现
黑箱实现
3.代码
白箱实现
/* * 备忘录角色 */ 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; } } /* * 负责人角色 */ public class Caretaker { private Memento memento; public Memento retrieveMemento() { return memento; } public void saveMemento(Memento memento) { this.memento = memento; } } /* * 发起人角色 */ public class Originator { private String state; public Memento createMemento() { return new Memento(state); } /* * 将发起人恢复到备忘录对象所记载的状态 */ public void restoreMemento(Memento memento) { this.state = memento.getState(); S.s("Current state = " + this.state); } public String getState() { return this.state; } public void setState(String state) { this.state = state; S.s("Current state = " + this.state); } } /* * 测试类 */ public class Test { private static Originator o = new Originator(); private static Caretaker c = new Caretaker(); public static void main(String[] args) { o.setState("On"); c.saveMemento(o.createMemento()); o.setState("Off"); o.restoreMemento(c.retrieveMemento()); } }
黑箱实现
/* * 标识接口 */ public interface MementoIF { } /* * 负责人角色 */ public class Caretaker { private MementoIF memento; public MementoIF retrieveMemento() { return this.memento; } public void saveMemento(MementoIF memento) { this.memento = memento; } } /* * 发起人角色 */ public class Originator { private String state; public Originator() { } public MementoIF createMemento() { return new Memento(this.state); } /* * 将发起人恢复到备忘录对象所记载的状态 */ public void restoreMemento(MementoIF memento) { Memento aMemento = (Memento)memento; this.setState(aMemento.getState()); S.s("Current state = " + this.state); } public String getState() { return this.state; } public void setState(String state) { this.state = state; S.s("Current state = " + this.state); } /* * 备忘录角色 */ protected class Memento implements MementoIF{ private String savedState; public Memento(String someState) { this.savedState = someState; } public String getState(){ return savedState; } public void setState(String someState) { this.savedState = someState; } } } /* * 测试类 */ public class Test { private static Originator o = new Originator(); private static Caretaker c = new Caretaker(); public static void main(String[] args) { o.setState("On"); c.saveMemento(o.createMemento()); o.setState("Off"); o.restoreMemento(c.retrieveMemento()); } }
z
需要跟进多重检查点。
1.用意
又叫快照模式或Token模式。
备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。
2.类图
白箱实现
黑箱实现
3.代码
白箱实现
/* * 备忘录角色 */ 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; } } /* * 负责人角色 */ public class Caretaker { private Memento memento; public Memento retrieveMemento() { return memento; } public void saveMemento(Memento memento) { this.memento = memento; } } /* * 发起人角色 */ public class Originator { private String state; public Memento createMemento() { return new Memento(state); } /* * 将发起人恢复到备忘录对象所记载的状态 */ public void restoreMemento(Memento memento) { this.state = memento.getState(); S.s("Current state = " + this.state); } public String getState() { return this.state; } public void setState(String state) { this.state = state; S.s("Current state = " + this.state); } } /* * 测试类 */ public class Test { private static Originator o = new Originator(); private static Caretaker c = new Caretaker(); public static void main(String[] args) { o.setState("On"); c.saveMemento(o.createMemento()); o.setState("Off"); o.restoreMemento(c.retrieveMemento()); } }
黑箱实现
/* * 标识接口 */ public interface MementoIF { } /* * 负责人角色 */ public class Caretaker { private MementoIF memento; public MementoIF retrieveMemento() { return this.memento; } public void saveMemento(MementoIF memento) { this.memento = memento; } } /* * 发起人角色 */ public class Originator { private String state; public Originator() { } public MementoIF createMemento() { return new Memento(this.state); } /* * 将发起人恢复到备忘录对象所记载的状态 */ public void restoreMemento(MementoIF memento) { Memento aMemento = (Memento)memento; this.setState(aMemento.getState()); S.s("Current state = " + this.state); } public String getState() { return this.state; } public void setState(String state) { this.state = state; S.s("Current state = " + this.state); } /* * 备忘录角色 */ protected class Memento implements MementoIF{ private String savedState; public Memento(String someState) { this.savedState = someState; } public String getState(){ return savedState; } public void setState(String someState) { this.savedState = someState; } } } /* * 测试类 */ public class Test { private static Originator o = new Originator(); private static Caretaker c = new Caretaker(); public static void main(String[] args) { o.setState("On"); c.saveMemento(o.createMemento()); o.setState("Off"); o.restoreMemento(c.retrieveMemento()); } }
z
黑箱实现/* * 标识接口 */ public interface MementoIF { } /* * 负责人角色 */ public class Caretaker { private MementoIF memento; public MementoIF retrieveMemento() { return this.memento; } public void saveMemento(MementoIF memento) { this.memento = memento; } } /* * 发起人角色 */ public class Originator { private String state; public Originator() { } public MementoIF createMemento() { return new Memento(this.state); } /* * 将发起人恢复到备忘录对象所记载的状态 */ public void restoreMemento(MementoIF memento) { Memento aMemento = (Memento)memento; this.setState(aMemento.getState()); S.s("Current state = " + this.state); } public String getState() { return this.state; } public void setState(String state) { this.state = state; S.s("Current state = " + this.state); } /* * 备忘录角色 */ protected class Memento implements MementoIF{ private String savedState; public Memento(String someState) { this.savedState = someState; } public String getState(){ return savedState; } public void setState(String someState) { this.savedState = someState; } } } /* * 测试类 */ public class Test { private static Originator o = new Originator(); private static Caretaker c = new Caretaker(); public static void main(String[] args) { o.setState("On"); c.saveMemento(o.createMemento()); o.setState("Off"); o.restoreMemento(c.retrieveMemento()); } }