备忘录模式

备忘录模式实现步骤

  1. 理清业务类,该类继续处理自己要做的业务逻辑。
  2. 定义一个容器类,这个容器类用来存储业务类的不同状态下的对象。
  3. 定义一个操作者类,这个操作者类用来负责让业务类的状态进行回滚,回到指定状态的对象。

案例

我们以一个状态监控例子,定义一个 net.haicoder.memoto 包,在这个包下面有 Memoto.java 业务类, Caretaker.java 容器类, Originator.java 用来操作业务类的状态信息和TestMain.java 这些文件。文件创建完毕后,目录结构如下:

14 备忘录模式代码结构图.png

Memoto.java 代码如下:

package net.haicoder.memoto; public class Memoto { private String state = ""; public Memoto(String state) { this.state = state; } public String getState() { return state; } public void setState(String state) { this.state = state; } }

Caretaker.java 代码如下:

package net.haicoder.memoto; /** * 相当于一个容器,将需要被记录的对象状态放入到该容器里面 */ public class Caretaker { private Memoto memoto; public Memoto getMemoto() { return memoto; } public void setMemoto(Memoto memoto) { this.memoto = memoto; } }

Originator.java 代码如下:

package net.haicoder.memoto; public class Originator { private String state = ""; public String getState() { return state; } public void setState(String state) { this.state = state; } public Memoto createMemoto() { return new Memoto(this.state); } public void restoreMemoto(Memoto memoto) { this.setState(memoto.getState()); } }

TestMain.java 代码如下:

package net.haicoder.memoto; public class TestMain { public static void main(String[] args) { System.out.println("嗨客网(www.haicoder.net)"); Originator originator = new Originator(); originator.setState("状态1"); System.out.println("初始状态:" + originator.getState()); Caretaker caretaker = new Caretaker(); caretaker.setMemoto(originator.createMemoto()); originator.setState("状态2"); System.out.println("改变后的状态:" + originator.getState()); originator.restoreMemoto(caretaker.getMemoto()); System.out.println("恢复后的状态:" + originator.getState()); } }

代码运行结果如下:

15 备忘录模式运行结果图.png

备忘录模式总结

设计模式中备忘录模式能够记录一个对象的内部状态当用户后悔的时候就能够撤销当前的操作,使数据恢复到它原先的状态。