GOF设计模式-备忘录模式
来源:互联网 发布:做班徽的软件 编辑:程序博客网 时间:2024/06/08 07:41
备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。
备忘录模式所涉及的角色有三个:备忘录(Memento)角色、发起人(Originator)角色、负责人(Caretaker)角色。
发起人角色类,发起人角色利用一个新创建的备忘录对象将自己的内部状态存储起来。
public class Originator { private String state; /** * 工厂方法,返回一个新的备忘录对象 */ public Memento createMemento(){ return new Memento(state); } /** * 将发起人恢复到备忘录对象所记载的状态 */ public void restoreMemento(Memento memento){ this.state = memento.getState(); } public String getState() { return state; } public void setState(String state) { this.state = state; System.out.println("当前状态:" + this.state); }}
备忘录角色类,备忘录对象将发起人对象传入的状态存储起来。
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 this.memento; } /** * 备忘录的赋值方法 */ public void saveMemento(Memento memento){ this.memento = memento; }}
客户端角色类
public class Client { public static void main(String[] args) { Originator o = new Originator(); Caretaker c = new Caretaker(); //改变负责人对象的状态 o.setState("On"); //创建备忘录对象,并将发起人对象的状态储存起来 c.saveMemento(o.createMemento()); //修改发起人的状态 o.setState("Off"); //恢复发起人对象的状态 o.restoreMemento(c.retrieveMemento()); System.out.println(o.getState()); }}
代码地址:https://github.com/mazh1992/model/
0 0
- GOF设计模式-备忘录模式
- GOF 23 设计模式之 备忘录模式(Memento)
- 设计模式与GoF
- GOF设计模式
- GoF的设计模式
- GOF设计模式
- GOF设计模式
- ----GoF 设计模式概要
- 戏说GoF设计模式
- GOF设计模式
- 设计模式GOF
- GoF是什么----设计模式
- GOF设计模式
- GOF设计模式
- Gof 23设计模式
- GOF 23设计模式
- Gof 设计模式
- gof 设计模式
- 开发帮助工具库 可查看网络请求 收集carsh 切换服务器
- python内建函数
- iOS - 图文混排(支持图片文字混排,网址@#话题#以及自定义链接,关键字高亮等)
- Git分支使用规范
- redis使用
- GOF设计模式-备忘录模式
- Xcode中提示”xx“is missing from working copy 的警告。
- docker study --- overlay docker cp not work
- maven 程序包org.junit不存在
- 常用性能优化策略总结
- screen.colorDepth(色彩深度) 和 screen.pixelDepth(像素深度)
- 轻量级Web漏洞教学演示系统DSVW
- <:if>没有<c:else>解决方案
- c/c++文件操作总结