备忘录模式
Posted fatrabbit-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了备忘录模式相关的知识,希望对你有一定的参考价值。
- 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。
-
-
/** * Originator(发起人):负责创建一个备忘录Memeto, * 用以记录当前它的内部状态,并可使用备忘录恢复内部状态。 * Originator可根据需要决定Mometo存储Originator的那些内部状态。 */ public class Originator { private String state; public void setState(String state) { this.state = state; } public String getState() { return state; } /** * 创建备忘录,将当前需要保存的信息导入 * * @return 实例化出一个Memeto对象 */ public Memento createMemeto() { return new Memento(state); } /** * 恢复备忘录,将Memeto导入并将相关数据恢复 * @param memento */ public void setMemeto(Memento memento) { state = memento.getState(); } public void show(){ System.out.println("State="+state); } } /** * Memento(备忘录):负责存储Originator对象的内部状态, * 并可防止Originator以外的其他对象访问备忘录Memento。 * 备忘录有两个接口, * Caretaker只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。 * Originator能看到备忘录的宽接口,允许它访问返回先前状态所需的所有数据 */ public class Memento { private String state; public Memento(String state) { this.state = state; } public String getState() { return state; } } /** * Caretaker(管理者):负责保存好备忘录Memento, * 不能对备忘录的内容进行操作或检查 */ public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; } } public class TestUtil { public static void main(String[] args) throws CloneNotSupportedException, NoSuchMethodException, InvocationTargetException, IllegalAccessException { //初始化状态 Originator originator = new Originator(); originator.setState("On"); originator.show(); //保存状态 Caretaker caretaker = new Caretaker(); caretaker.setMemento(originator.createMemeto()); //改变状态 originator.setState("Off"); originator.show(); //恢复初始状态 originator.setMemeto(caretaker.getMemento()); originator.show(); }
以上是关于备忘录模式的主要内容,如果未能解决你的问题,请参考以下文章