设计模式(4)-行为型-备忘录模式(Memento)
来源:互联网 发布:淘宝全屏首页装修教程 编辑:程序博客网 时间:2024/05/22 00:22
意图:
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。相当于撤销。
适用性:
必须保存一个对象在某一个时刻的(部分)状态, 这样以后需要时它才能恢复到先前的状态。
如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。
简单代码,便于理解:
/*** 发起人角色类,发起人角色利用一个新创建的备忘录对象将自己的内部状态存储起来。*/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); }}/*** 备忘录角色类,备忘录对象将发起人对象传入的状态存储起来。* 当要备忘多个状态时,备忘录中可以使用map存储数据。*/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; }}/*** 负责人角色类,负责人角色负责保存备忘录对象,但是从不检查备忘录对象的内容。* 当有多个备忘录时,可以使用map存储备忘录*/public class Caretaker { private Memento memento; /** * 备忘录的取值方法 */ public Memento retrieveMemento(){ return this.memento; } /** * 备忘录的赋值方法 */ public void saveMemento(Memento memento){ this.memento = memento; }}/*** 客户端角色*/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());}
0 0
- 设计模式(4)-行为型-备忘录模式(Memento)
- 设计模式--备忘录模式Memento(行为型)
- 设计模式-行为型- 备忘录模式(Memento)
- 行为型模式-----备忘录模式(Memento)
- 行为模式:Memento(备忘录)
- [设计模式-行为型]备忘录模式(Memento)
- 十八、备忘录模式Memento(行为型)
- 备忘录模式Memento(对象行为型)
- 设计模式学习之备忘录模式(Memento,行为型模式)(19)
- 设计模式学习之备忘录模式(Memento,行为型模式)(19)
- 设计模式学习之备忘录模式(Memento,行为型模式)(19)
- C#面向对象设计模式纵横谈 学习笔记21 Memento备忘录模式(行为型模式)
- 行为型模式之备忘录模式(Memento)
- 七、备忘录模式Memento(行为型模式)
- 行为型模式之备忘录模式(Memento)
- 设计模式----Memento(备忘录)
- 行为型模式-备忘录memento
- 备忘录模式(Memento)----行为笔记
- 哈理工OJ 1924 分数表达式(暴力枚举)
- C++PAT练习1001
- Android ViewPager与SwipeBackLayout的业务需求解决
- Android Snackbar使用方法及小技巧-design
- 高斯消元
- 设计模式(4)-行为型-备忘录模式(Memento)
- 随机数函数应用于游戏(1)
- VS2013与QT5 可视化消息与响应槽的添加
- 学好hibernate系列之常用注解开发
- 查找Java程序中CPU使用率最大的线程
- Hibernate实体关系映射技巧
- PAT 1063Count PAT's (25)
- 互联网线上项目开发最大坑点-并发冲突处理
- 几个问题