【设计模式】行为型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 ...
随机推荐
- Win10忘记ubuntu子系统密码
原文:Win10忘记ubuntu子系统密码 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wf19930209/article/details/80 ...
- android 随着认识的去除率EditText(它配备了防抖效果)
Android它没有提供的类似至ios自带的输入框效果清晰(ios简单地只加属性可实现).因此,Android其中 我们要如何实现就需要这种效果用自己的定义的控件实现. 思路:能够使用一个Linear ...
- Qt设置窗口的初始大小(使用sizeHint这个虚函数,或者在构造函数里使用resize函数)
我们用qt创建一个窗口,先后显示它,代码如下: class Mywindow : public QMainWindow{ ..... } int main( int argc, char** argv ...
- 【C#】使用EF访问Sqlite数据库
原文:[C#]使用EF访问Sqlite数据库 1. 先上Nuget下载对应的包 如图,搜索System.Data.SQLite下载安装即可,下载完之后带上依赖一共有这么几个: EntityFramew ...
- 自动启动 Windows 10 UWP 应用
原文: https://docs.microsoft.com/zh-cn/windows/uwp/xbox-apps/automate-launching-uwp-apps 简介 开发人员有多种选项可 ...
- vs2017 cordova调试ios app
https://docs.microsoft.com/en-us/visualstudio/cross-platform/tools-for-cordova/first-steps/ios-guide ...
- PHP XDebug Sublime Text 单步调试
前置环境:已经安装好LNMP 1. 安装xdebug 可以通过pear包管理来安装 sudo apt-get install php-pear sudo pecl install xdebug 这里我 ...
- Android零基础入门第11节:简单几步带你飞,运行Android Studio工程
原文:Android零基础入门第11节:简单几步带你飞,运行Android Studio工程 之前讲过Eclipse环境下的Android虚拟设备的创建和使用,现在既然升级了Android Studi ...
- 解决Delphi的Indy10组件包TIdHttpServer控件解码HTTP请求时参数乱码的问题
Delphi6下使用Indy10组件包,其中的TIdHttpServer控件在处理HTTP请求的时候 不能正确解码含有汉字的参数,如: http://127.0.0.1/test?cmd=open&a ...
- Scintilla开源库使用指南
http://www.cnblogs.com/superanyi/archive/2011/04/07/2008636.html http://download.csdn.net/detail/den ...