- 浏览: 856770 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (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 2134<div class="iteye-blog- ... -
ubuntu下MySQL用source命令导入sql文件出现乱码解决方法
2012-11-18 23:46 1637首先建立数据库的时候指明数据库编码如: CREA ... -
RandomAccessFile
2012-10-18 18:16 1024public void run() { try { ... -
java中多种方式读文件
2012-10-18 16:53 1022java中多种方式读文件一、多种方式读文件内容。1、按字节读取 ... -
FileChannelMain
2012-10-15 18:12 1140package scan; import java ... -
Apache FtpServer在64位系统下服务不能启动解决方法
2012-06-10 21:29 6995Apache FTPServer是一款用Java开发的 ... -
Java 集合类
2012-06-07 22:03 1995Java 集合类 1. 为什么要了解J ... -
short、int、long与byte之间的转换工具类
2012-05-31 11:05 4574/** * 各基础类型与byte之间的转换 * ... -
Linux Mint 13 配置JAVA 环境
2012-05-24 22:35 26950.1--下载 JAVA ... -
FatJar+Exe4j+Inno Setup 生成可执行的exe文件
2012-04-17 10:54 14961、fatjar 是Eclipse的一个免费的插件。它的 ... -
JPanel JTextField add Focus 获取焦点解决方案
2012-03-30 21:29 3063public class TabPagePanel ex ... -
JList List<E> Page 分页
2012-03-30 21:28 1790package view.retrieve.comps. ... -
JButton setAction的BUG
2012-03-23 10:53 1336今天在使用JButton的时候,想用setText()setI ... -
自定义JTabbedPane皮肤
2012-03-22 12:05 4778package ui; import java.awt. ... -
两个工具类
2012-03-17 21:27 925package 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 1425Invalid command: InetLoad::load ... -
NIO: High Performance File Copying
2012-03-01 17:25 1235In a previous tip, I discussed ... -
自定义JList
2012-02-03 15:39 840自定义JList。
相关推荐
**C++ Memento模式** Memento模式是一种行为设计模式,属于设计模式中的“状态保存”类别,它在不破坏封装性的前提下,捕获一个对象的内部状态,并可以在需要时恢复对象到先前的状态。这种模式常用于实现撤销/重做...
《C++设计模式:Memento模式深度解析》 在软件工程中,设计模式是一种被广泛认可的解决特定问题的模板,它为复杂性提供了一种结构化的处理方式。Memento模式,又称备忘录模式,是行为设计模式之一,主要用于在不...
备忘录模式(Memento Pattern)是设计模式中的一种行为模式,主要目的是在不违反封装原则的情况下,保存一个对象的内部状态,以便在需要时能够恢复到先前的状态。这种模式通常用于实现撤销/重做功能或者在游戏中保存...
备忘录模式(Memento Pattern)是设计模式中的一种行为模式,它允许对象在不破坏封装性的前提下,捕获并存储其内部状态,以便在需要时能够恢复到之前的状态。这种模式通常用于数据恢复或者撤销/重做操作。在Java中,...
singleton模式、Factory模式、Abstract Factory模式、Builder模式、Prototype模式、Adapter模式、Bridge模式、Composite模式、Decorator模式、...模式、Interpreter模式、Iterator模式、Mediator模式、Memento模式等...
Memento模式是一种行为模式,旨在解决在不破坏封装性的前提下,捕获一个对象的内部状态的问题。该模式可以在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 Observer模式 Observer...
Memento模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。 #### Mediator模式 Mediator模式用一个中介对象来封装一系列的对象交互...
8. **Memento模式**:Memento模式是用于保存对象状态的一种创建型设计模式,它允许在不破坏封装性的前提下恢复对象到之前的状态。 9. **Flyweight模式**:Flyweight模式属于结构型设计模式,用于减少大量细粒度对象...
3. **Memento模式**(对应文件Memento.rar):它允许对象保存其内部状态并在未来恢复。这个模式通过创建一个备忘录对象来存储对象的状态,而不破坏封装性。 4. **观察者模式**:定义对象间的一种一对多依赖关系,当...
Memento模式在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。 - **3.6 Mediator模式** Mediator模式用一个中介对象来封装一系列的...
- Memento模式:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 - Mediator模式:用一个中介对象来封装一系列的对象交互,中介者使各对象...
Memento模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 #### 3.6 Mediator模式 Mediator模式用一个中介对象来封装一系列的对象...
- **Memento模式**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 - **Mediator模式**:用一个中介对象来封装一系列的对象交互。...
10. **Memento模式**:Memento模式用于在不破坏封装性的前提下,捕获和恢复对象的状态。它通过创建一个备份对象(Memento)来保存对象的状态,以便在需要时恢复。 这些设计模式的源代码可以帮助开发者更好地理解和...
Memento模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 6. **Mediator模式** Mediator模式用一个中介对象来封装一系列的对象...
Memento模式在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。这种模式适用于当必须保存和恢复数据时,而不能将数据暴露给外界时。 - **...
Memento模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。 **3.6 Mediator模式** Mediator模式用一个中介对象来封装一系列的对象...