行为型设计模式 - 备忘录模式详解
2020-05-07 23:57
295 查看
基本介绍
备忘录模式(Memento Pattern):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态
模式结构
Originator(发起者):记录当前的状态,负责创建和恢复备忘录
Memento(备忘录):负责存储发起者的状态,在需要的时候提供发起人需要的状态
Caretaker(管理者):管理备忘录
代码演示
(这里我们以单角色、单状态、单备份来演示,思想是相同的,无非是存储数据结构上的区别)
备忘录角色,定义了存储状态的变量,可以根据实际需求定义对应的存储对象
public class Memento { private String state; public String getState() { return state; } public void setState(String state) { this.state = state; } }
发起者角色,存储状态,并且可以创建备忘录和将状态恢复为备忘录的值
public class Originator { private String state; public String getState() { return state; } public void setState(String state) { this.state = state; } public Memento createMemento() { Memento memento = new Memento(); memento.setState(state); return memento; } public void restoreMemento(Memento memento) { this.state = memento.getState(); } }
管理者角色,管理了备忘录
public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; } }
测试类
public class Client { @Test public void test() { //设置初始状态 Originator originator = new Originator(); originator.setState("状态1"); System.out.println("初始状态:" + originator.getState()); //创建管理者 Caretaker caretaker = new Caretaker(); caretaker.setMemento(originator.createMemento()); //更新状态 originator.setState("状态2"); System.out.println("跟新状态:" + originator.getState()); //恢复状态 originator.restoreMemento(caretaker.getMemento()); System.out.println("恢复状态:" + originator.getState()); } }
运行结果
初始状态:状态1 跟新状态:状态2 恢复状态:状态1
模式分析
优点:
- 给用户提供了一种可以恢复状态的机制,使用户可以比较方便的回退到某个历史的状态
- 实现了信息的封装,使用户不需要关心备忘录中状态的保存细节
缺点:
- 在实际应用中,备忘录模式都是多状态和多备份的,发起人角色的状态需要存储到备忘录对象中,对资源的消耗是比较严重的,为了节约内存,可以配合原型模式使用
应用场景:
- 游戏的存档
- CTRL + Z 撤销
- 浏览器的后退
- 数据库的事务管理
- ... ...
相关文章推荐
- Java设计模式(行为型)之-备忘录模式(Memento)
- java设计模式--行为型模式--备忘录模式
- Java设计模式_行为型_备忘录模式_大话西游之月光宝盒
- "围观"设计模式(31)--行为型设计模式总结(模板、观察者、策略、状态、责任链、命令、访问者、中介者、备忘录、解释器)
- 23种设计模式模式详解 Java 行为型模式(三)
- 行为型设计模式-备忘录模式
- 行为型:设计模式之备忘录模式(二十)
- “设计模式”学习之八:备忘录、观察者与状态(行为型)
- Java开发中的23种设计模式详解之三:11种行为型模式
- Java设计模式,行为型(三)(迭代器模式,备忘录模式)
- 设计模式-04-行为型模式详解
- 设计模式之十一种行为型模式(附实例和详解)
- Java开发中的23种设计模式详解(3)行为型
- 详解java设计模式(三)之策略模式(行为型)
- C#设计模式之行为型模式详解
- 设计模式21:备忘录模式【行为型】
- [设计模式笔记]三. 行为型模式--20. Memento模式(备忘录)对象行为型模式(一)
- 备忘录模式 Memento 快照模式 标记Token模式 行为型 设计模式(二十二)
- 设计模式之行为型模式(责任链、命令、解释器、迭代式、仲裁者、备忘录、观察者、状态、策略、模板方法、访问者)
- 详解java设计模式(四)之迭代器模式(行为型)