设计模式--备忘录模式
Posted fating
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式--备忘录模式相关的知识,希望对你有一定的参考价值。
一、概要
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
特点:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 注意【并在该对象之外保存这个状态】这个说法。
使用场景:1、撤销键;2、游戏存档。
角色:
A:Memento:包含了要被恢复的对象的状态。
B:Originator:创建并在 Memento 对象中存储状态
C:Caretaker:对象负责从 Memento 中恢复对象的状态。
D:Client:客户端实现类
二、例子
A:Memento:包含了要被恢复的对象的状态。
1 package comm.pattern.action.memento; 2 3 /** 4 * 5 * @Title: Memento.java 6 * @Package: comm.pattern.action.memento 7 * @Description: 备忘录,记录状态 8 * @author yangzhancheng 9 * @2020年3月5日:下午10:32:14 10 * 11 */ 12 public class Memento { 13 14 private String state; 15 16 public Memento(String state) { 17 this.state = state; 18 } 19 20 public void setState(String state) { 21 this.state = state; 22 } 23 24 public String getState() { 25 return state; 26 } 27 28 }
B:Originator:创建并在 Memento 对象中存储状态
1 package comm.pattern.action.memento; 2 3 /** 4 * 5 * @Title: Originator.java 6 * @Package: comm.pattern.action.memento 7 * @Description: 创建者,备忘录需要记录它的状态 8 * @author yangzhancheng 9 * @2020年3月5日:下午10:32:40 10 * 11 */ 12 public class Originator { 13 14 private String state; 15 16 public void setState(String state) { 17 this.state = state; 18 } 19 20 public String getState() { 21 return state; 22 } 23 24 //创建备忘录 25 public Memento createMemento() { 26 return new Memento(state); 27 } 28 29 //反复备忘录的状态 30 public void restoreMemento(Memento m) { 31 this.setState(m.getState()); 32 } 33 34 public void show(){ 35 System.out.println("状态:"+state); 36 } 37 }
C:Caretaker:对象负责从 Memento 中恢复对象的状态。
1 package comm.pattern.action.memento; 2 3 /** 4 * 5 * @Title: Caretaker.java 6 * @Package: comm.pattern.action.memento 7 * @Description: //管理者,主要管理备忘录 8 * @author yangzhancheng 9 * @2020年3月5日:下午10:34:33 10 * 11 */ 12 public class Caretaker { 13 14 private Memento memento; 15 16 public void setMemento(Memento m) { 17 memento = m; 18 } 19 20 public Memento getMemento() { 21 return memento; 22 } 23 }
D:Client:客户端实现类
1 package comm.pattern.action.memento; 2 3 /** 4 * 5 * @Title: ClientPush.java 6 * @Package: comm.pattern.action.observer.push 7 * @Description: 客户端实现类 8 * @author yangzhancheng 9 * @2020年3月3日:下午10:55:27 10 * 11 */ 12 13 public class Client { 14 15 public static void main(String[] args) { 16 17 //1.创建者初始化一个状态 18 Originator or = new Originator(); 19 or.setState("01"); 20 or.show(); 21 22 //2.创建外部备忘录--注意是外部备忘录 23 Caretaker cr = new Caretaker(); //创建一个管理对象,本对象可以用列表进行管理,本例子简化 24 cr.setMemento(or.createMemento()); 25 26 //3.设置新状态 27 or.setState("02"); 28 or.show(); 29 30 //4.回复原来状态 31 or.restoreMemento(cr.getMemento()); // 恢复状态 32 or.show(); 33 } 34 35 }
运行结果
状态:01 状态:02 状态:01
三、总结
后续补充,主要看看那些开源程序已经实现。
以上是关于设计模式--备忘录模式的主要内容,如果未能解决你的问题,请参考以下文章