【设计模式】行为型07备忘录模式(Memento Pattern)
参考地址:http://www.runoob.com/design-pattern/memento-pattern.html
对原文总结调整,以及修改代码以更清晰的展示:
备忘录模式(快照模式):
定义:顾名思义,备忘录模式是在不破坏封装性的前提下,通过备忘录对象,记录一个对象的内部状态,并在该对象之外保存这个状态。
应用场景: 2、打游戏时的存档。 3、Windows 里的 ctri + z。 4、IE 中的后退。 4、数据库的事务管理。
图:日后再画
代码:
1、状态记录类:
package com.pat.snap;
/**
* 备忘录对象,用于记录
* @author Administrator
*
*/
public class Memento {
private String text="";
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
2、编辑器-被记录类
package com.pat.snap;
/**
* 记事本对象,被记录的对象
* @author Administrator
*
*/
public class TextEditor {
//正在编辑的内容
private String text="";
public String getText() {
return text;
}
public void setText(String text) {
this.text = this.text+text;
}
//保存
public Memento saveHistory() {
Memento curr = new Memento();
curr.setText(this.text);
return curr;
}
//ctrl+z
public void backUp(Memento mem) {
this.text=mem.getText();
}
}
3、存储记录
package com.pat.snap;
import java.util.ArrayList;
import java.util.List;
/**
* 管理历史,负责恢复
* @author Administrator
*
*/
public class CareTaker {
private List<Memento> mementoList = new ArrayList<Memento>();
public void add(Memento state){
mementoList.add(state);
}
public Memento get(int index){
return mementoList.get(index);
}
}
4、测试类
package com.pat.snap;
/**
* 测试类
* @author ZX
*
*/
public class Test {
public static void main(String[] args) {
//创建历史记录管理类
CareTaker ct =new CareTaker();
//记事本编辑文件
TextEditor td = new TextEditor();
td.setText("123");
td.setText("456");
//创建快照1
Memento h1 = td.saveHistory();
ct.add(h1);
td.setText("789");
td.setText("10");
td.setText("11");
//创建快照2
Memento h2 = td.saveHistory();
ct.add(h2);
//获取快照1
Memento memento1 = ct.get(0);
System.out.println(memento1.getText());
//获取快照2
Memento memento2 = ct.get(1);
System.out.println(memento2.getText());
}
}
5、运行结果:
123456
1234567891011
【设计模式】行为型07备忘录模式(Memento Pattern)的更多相关文章
- 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)
原文:乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) 作者:webabc ...
- 二十四种设计模式:备忘录模式(Memento Pattern)
备忘录模式(Memento Pattern) 介绍在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到保存的状态. 示例有一个Message实体类,某 ...
- 备忘录模式-Memento Pattern(Java实现)
备忘录模式-Memento Pattern Memento备忘录设计模式是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到以前保存的状态. 本文中的场景: 有一款游戏可以随时存档, ...
- c++ 行为型_备忘录模式(Memento)
行为型_备忘录模式(Memento) 作用场景: 当意图在对象外面保存对象的内部状态,但是又不想破坏对象的封装性,就可以考虑备忘录模式. 解释: 其参与者包括 1.Memnto(备忘录,如下列Coun ...
- [设计模式] 18 备忘录模式Memento Pattern
在GOF的<设计模式:可复用面向对象软件的基础>一书中对备忘录模式是这样说的:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存 ...
- 23.备忘录模式(Memento Pattern)
using System; using System.Collections.Generic; namespace ConsoleApplication6 { /// <summary> ...
- 备忘录模式-Memento Pattern
1.主要优点 备忘录模式的主要优点如下: (1)它提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原. (2) ...
- 用最简单的例子理解备忘录模式(Memento Pattern)
简单来说,备忘录模式就是支持回退操作.假设让一个Notepad支持回退操作,如何实现呢? 首先需要一个备忘录类. public class Memento { private string _msg; ...
- php备忘录模式(memento pattern)
晚上刷起来. <?php /* The memento pattern provides the object restore functionality. Implementation is ...
随机推荐
- .net core下,Ocelot网关与Spring Cloud Gateway网关的对比测试
有感于 myzony 发布的 针对 Ocelot 网关的性能测试 ,并且公司下一步也需要对.net和java的应用做一定的整合,于是对Ocelot网关.Spring Cloud Gateway网关做个 ...
- HDU 1867 A + B for you again KMP解决问题的方法
这是一个典型问题KMP申请书. 结果求增加两个字符串.该法的总和是相同的前缀和后缀也是字符串的字符串,您将可以合并本节. 但是,这个问题是不是问题非常明确的含义,因为不是太清楚,外观这两个字符串的顺序 ...
- 我的Spring之旅(二):为请求加入參数
1.前言 在上一篇我的Spring之旅(一)中,我们仅仅是利用不带參数的请求返回一个网页或一段json,在实际的B/S.C/S网络交互中,请求中须要自己定义的參数.本篇将简单地为之前的请求加入參数. ...
- rc-form(翻译)
原地址:https://npm.taobao.org/package/rc-form rc-form React 高阶表单控制组件. 开发 npm install npm start op ...
- 简化网站开发:SiteMesh小工具
在一个站点的制备,几乎所有的页面将具有相同的部分.导航栏例如,顶,每一页都是一样的,在底部的版权声明,每一页还都是一样的. 因此,在顶部导航栏的准备.第一种方法是直接复制的所有导航栏的代码,这种方法是 ...
- WPF特效-鱼游动动画
原文:WPF特效-鱼游动动画 实现思路: 通过VisualBrush Binding方式获取鱼局部图像,在Viewport3D中创建ModelVisual3D块并把获取到的局部 ...
- 【开源】jquery省市区插件
先来张效果图,演示地址:http://long-woo.github.io/jquery-city/ 1.动画效果使用的是animate.css 2.支持选择和键盘输入(中英文输入) 3.服务端返回的 ...
- WPF下Itemscontrol分组 样式
原文 WPF下Itemscontrol分组 样式 <ItemsControl Grid.Row="1" DataContext="{Binding Layouts} ...
- QT 自定义消息(超级简单的一个例子)
#define TEST_EVENT QEvent::User + 100 class CVxActuatorMain : public QMainWindow { protected: ...
- OPENGL---Ps 径向模糊算法(glsl)
原文:OPENGL---Ps 径向模糊算法(glsl) 本文转载自: http://blog.csdn.net/zx6733090/article/details/40311689 功能本人之前也介 ...