- 浏览: 829718 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (379)
- struts (5)
- hibernate (16)
- spring (16)
- ssh (20)
- MySQL (16)
- 数据库脚本 (2)
- DownLoad (1)
- GAE (5)
- Java (103)
- LoadRunner (2)
- VF (1)
- 学习资料 (24)
- 软件使用 (21)
- 通信类 (4)
- 生活 (3)
- J2ME (1)
- 心理学 (1)
- Linux (26)
- Android (3)
- Oracle (1)
- 面向对象概念&面试准备 (11)
- ExtJs (2)
- Google Map (1)
- Flex (47)
- 算法研究 (1)
- share (20)
- python (1)
- MongoDB (7)
- centos6 (13)
- C++ (8)
- DB2 (3)
- C# (1)
- 代码片段 (24)
- Lucene (2)
- php (1)
- NodeJS (1)
- Express (1)
最新评论
-
shua1991:
已阅,我表示同意。
Eclipse统计代码行数 -
nakedou:
写的不错,挺详细的
在CentOS中使用 yum 安装MongoDB及服务器端配置 -
sjp524617477:
好方法
Eclipse统计代码行数 -
simpletrc:
<script>ale ...
Java写到.txt文件,如何实现换行 -
csdn_zuoqiang:
Apache Ftp Server,目前是1.0.4,非常好的 ...
Apache FtpServer在64位系统下服务不能启动解决方法
一、Memento模式的目的:
memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态.
二、Memento模式的简单例子:
下面的例子来源于Jdon网站的《GoF设计模式系列》的《Memento模式》,虽然简单却形象地表明了Memento模式的应用
package memento; import java.io.File; public class Originator { private int number; private File file = null; public Originator(){ } // 创建一个Memento,将自身作为参数传入 public Memento getMemento(){ return new Memento(this); } //从Memento中取出保存的数据,恢复为原始状态 public void setMemento(Memento m){ number = m.getNumber(); file = m.getFile(); } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public File getFile() { return file; } public void setFile(File file) { this.file = file; } }
package memento; import java.io.File; import java.io.Serializable; public class Memento implements Serializable { private int number; private File file = null; public Memento(Originator o){ this.number = o.getNumber(); this.file = o.getFile(); } public int getNumber() { return this.number; } public void setNumber(int number) { this.number = number; } public File getFile() { return this.file; } public void setFile(File file) { this.file = file; } }
三、Memento模式的特点:
在需要提供保存、恢复对象状态的类中,必须提供两个方法:
.保存对象当前状态方法:将对象自身(this)作为参数传入,创建备忘录。
.恢复对象之前状态的方法:取出备忘录/接收一个备忘录对象,从中获取对象之前的状态
模式的缺点是耗费大,如果内部状态很多,再保存一份,无意要浪费大量内存.
注意:Memento模式保存的是操作前对象的状态,而不是操作后对象的状态;否则就没办法做恢复了
一、“Mementor”模式和“堆栈”的结合-“GUI界面撤销功能”的实现
·当用户在面板中拖动一个组件到编辑区时,应用程序为编辑区创建一个备忘录,并把它加入到一个堆栈中(注意此时备忘录中包含的是操作前的状态,而非操作后的状态)
·当用户单击“撤销”按钮时,应用程序就将堆栈顶部的备忘录弹出,然后将编辑区恢复为该备忘录所记录的状态
当可视化应用程序启动后,首先向空的堆栈中压入一个初始的空备忘录,并且保证绝对不会将该备忘录从栈中弹出,从而确保该栈的顶部总是有一个有效的备忘录。当栈中仅包含一个备忘录的时候,应用程序应当禁用“撤销”按钮
二、“Mementor”模式和“Observer”模式的结合-“通知式恢复”
在某些情况下,我们希望为GUI组件注册一些监听器,当组件的状态发生改变时,可以通知所有对它感兴趣的监听器,这种情况我们可以用“Observer”模式来实现。
还是以我们上面的例子来说:假如用户从面板中拖动一个组件到编辑区后,有几个监听器对它感兴趣,并且采取了相应的操作,现在用户单击了“撤销”按钮,那么我们应该把这个事件通知所有监听器,告诉他们必须恢复之前所有的状态。这种情况就可以把两种模式结合起来使用:
·当对象被创建时,激活并为该对象注册监听器(观察着),监听器创建一个初始化备忘录,保存编辑区的原始信息
·当对象(被观察着)被销毁(用户单击“撤销”按钮时),向所有注册的监听器发送信息
·监听器(观察者)接收到信息,从备忘录中取出编辑区信息的备忘录,恢复当前编辑区的状态
三、“Mementor”模式和“Observer”模式、“责任链”模式的结合-“链式通知恢复”
在上面我们提到了将“Mementor”模式和“Observer”模式结合起来达到到“通知式恢复”的效果,考虑下面一个情况:
如果我们在安装一个软件或执行一个长时间、多次交互的情况,加入用户在最后一个操作中选择了“取消”操作,我们应该怎么做呢?
我的想法是在为每一次操作创建一个备忘录,并将其放在“责任链”上,当最后用户选择取消时,沿着这条“责任链”一个个通知观察者,由观察者取出备忘录,执行恢复工作。
注意:这个方法和第二个方法有点区别:第二个方法不管恢复的顺序,而第三种方法适合讲究恢复顺序的情况,例如前面提到的软件安装的撤销。
四、“Mementor”模式和“Flyweight”模式的结合:减少相同对象的拷贝
用于保存对象状态的“备忘录”对象,必须拥有一份和被保存对象相同的属性拷贝。
对于“备忘录”有可能导致内存消耗过大的情况,如果对象中的属性是“公用的”(即多个对象可以共享一个属性),那么我们可以考虑采用“享元模式”,减少相同属性对象的创建。但是这个方法对于属性多为运行时确定的情况作用不大。
发表评论
-
微信JS
2013-10-26 21:17 2037<div class="iteye-blog- ... -
ubuntu下MySQL用source命令导入sql文件出现乱码解决方法
2012-11-18 23:46 1479首先建立数据库的时候指明数据库编码如: CREA ... -
RandomAccessFile
2012-10-18 18:16 937public void run() { try { ... -
java中多种方式读文件
2012-10-18 16:53 920java中多种方式读文件一、多种方式读文件内容。1、按字节读取 ... -
FileChannelMain
2012-10-15 18:12 1067package scan; import java ... -
Apache FtpServer在64位系统下服务不能启动解决方法
2012-06-10 21:29 6791Apache FTPServer是一款用Java开发的 ... -
Java 集合类
2012-06-07 22:03 1550Java 集合类 1. 为什么要了解J ... -
short、int、long与byte之间的转换工具类
2012-05-31 11:05 4470/** * 各基础类型与byte之间的转换 * ... -
Linux Mint 13 配置JAVA 环境
2012-05-24 22:35 26160.1--下载 JAVA ... -
FatJar+Exe4j+Inno Setup 生成可执行的exe文件
2012-04-17 10:54 14231、fatjar 是Eclipse的一个免费的插件。它的 ... -
JPanel JTextField add Focus 获取焦点解决方案
2012-03-30 21:29 2978public class TabPagePanel ex ... -
JList List<E> Page 分页
2012-03-30 21:28 1727package view.retrieve.comps. ... -
JButton setAction的BUG
2012-03-23 10:53 1273今天在使用JButton的时候,想用setText()setI ... -
自定义JTabbedPane皮肤
2012-03-22 12:05 4707package ui; import java.awt. ... -
两个工具类
2012-03-17 21:27 859package com.retrieve.utils; ... -
两个工具类
2012-03-17 21:27 0package com.retrieve.utils; ... -
mysql、sqlserver、oracle分页,java分页统一接口实现
2012-03-13 17:56 0定义: pageStart 起始页,pageEnd 终止页, ... -
Invalid command: InetLoad::load
2012-03-06 16:41 1281Invalid command: InetLoad::load ... -
NIO: High Performance File Copying
2012-03-01 17:25 1146In a previous tip, I discussed ... -
自定义JList
2012-02-03 15:39 770自定义JList。
相关推荐
23种设计模式之十七(行为模式)Memento模式
主要介绍了Java设计模式之备忘录模式(Memento模式)介绍,memento是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到原先保存的状态,需要的朋友可以参考下
设计模式精解-GoF 23 种设计模式解析附 C++实现源码 ...3.5 Memento模式 3.6 Mediator模式 3.7 Command模式 3.8 Visitor模式 3.9 Chain of Responsibility模式 3.10 Iterator模式 3.11 Interpreter模式 4 说明
Memento 模式 Observer 模式 State 模式 Strategy 模式 Template Method 模式 Visitor 模式 Guarded Suspension 模式 Producer Consumer 模式 Worker Thread 模式 Thread-Per-Message 模式 ...
备忘录模式(Memento) 用意:用来存储另一对象内部状态的快照。
设计模式精解- GoF 23 种设计模式解析附 C++实现源码 ...3.5 Memento模式 .................................................................................................................103 3.6 Mediator模
6.3.6 备忘录模式(memento模式) 6.3.7 迭代子模式(iterator模式) 6.3.8 访问者模式(visitor模式) 6.3.9 调停者模式(mediator模式) 6.3.10 状态模式(state模式) 第7章 工具篇 7.1 极限编程的集成...
主要介绍了C#备忘录模式(Memento Pattern),以一个支持回退操作的例子讲述了C#备忘模式的实现方法,需要的朋友可以参考下
3.5 Memento模式.............................73 3.6 Mediator模式..............................76 3.7 Command模式............................81 3.8 Visitor模式..................................87 ...
3.5 Memento模式...................................................................................................................73 3.6 Mediator模式.....................................................
3.5 Memento模式........................................... 3.6 Mediator模式............................................ 3.7 Command模式.......................................... 3.8 Visitor模式..........
3.5 Memento模式 .................................................................................................................103 3.6 Mediator模式.....................................................
C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式
C#面向对象设计模式 (行为型模式) Memento 备忘录模式 视频讲座下载
3.5 Memento模式...................................................................................................................73 3.6 Mediator模式......................................................
1 创建型模式 1.1 Factory 模式 1.2 AbstactFactory 模式 ...3.5 Memento 模式 3.6 Mediator 模式 3.7 Command 模式 3.8 Visitor 模式 3.9 Chain of Responsibility 模式 3.10 Iterator 模式 3.11 Interpreter 模式
3.5 Memento模式...................................................................................................................73 3.6 Mediator模式.....................................................