- 浏览: 1336599 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
您希望您的程式中具有复原机制,如果您直接在物件中建立复原机制,这会使得物件本身的职责加重,并且使得物件的重用性降低。
与其在物件内建立复原机制,不如将复原机制从物件中脱离出来,这个时候您可以使用Memento模式来达成这个功能。
Memento模式在Originator中保留一个Memento成员,这个Memento可以包括Originator的成员资讯,在外部的话, Memento可以由一个Caretaker维护,每对Originator作一个动作,Caretaker就保留Originator动作前的成员状态,如果以后要复原物件状态,只要从Caretaker取回Memento物件,对Originator进行状态复原。
Caretaker是用来保留原发者所创造的备忘录物件,以供日后复原时取回,state表示一个内部状态,内部状态多时,也可以将之组织为一个类别,Caretaker维护的Memento可以是多个,用来实现Redo与Undo多次的功能。
下面提供一个简单的实作,看看如何实现Memento模式:
- Originator.java
public class Originator { private String name; private String phone; public Originator(String name, String phone) { this.name = name; this.phone = phone; } // Some operations make state changed public void someOperation() { name = "noboby"; phone = "911-911"; } // recover object's state public void setMemento(Memento m) { this.name = m.getName(); this.phone = m.getPhone(); } public Memento createMemento() { return new Memento(name, phone); } public void showInfo() { System.out.println("Name: " + name + "\nPhone: " + phone + "\n"); } }
- Memento.java
public class Memento { private String name; private String phone; public Memento(String name, String phone) { this.name = name; this.phone = phone; } public String getName() { return name; } public String getPhone() { return phone; } public void setName(String name) { this.name = name; } public void setPhone(String phone) { this.phone = phone; } }
- Caretaker.java
public class Caretaker { private Memento memento; public void setMemento(Memento memento) { this.memento = memento; } public Memento getMemento() { return memento; } }\
- Main.java
public class Main { public static void main(String[] args) { Originator originator = new Originator("Justin", "888-8888"); Caretaker caretaker = new Caretaker(); // save object's memento caretaker.setMemento(originator.createMemento()); originator.showInfo(); // some operations make the object's state changed originator.someOperation(); originator.showInfo(); // use memento to recover object's state originator.setMemento(caretaker.getMemento()); originator.showInfo(); } }
可以结合 Command 模式 来实作Redo/Undo的功能,将操作前后的物件状态记录下来,并记录所使用的命令,当要实现Undo/Redo时,只要取回Memento物件以复原物件状态即可。
发表评论
-
J2ME 的优化措施
2012-07-11 02:15 1178常见的性能瓶颈:1.文件的读写和网络的操作2.CPU3.内存4 ... -
JAVA缓存 - Cache类
2011-09-28 11:04 4619JAVA缓存有两种: 一、文件缓存,是指把数据存储在磁盘上 ... -
Java注释(Annotation)详解
2011-03-31 18:22 2404注释:在一个类中可以有多个,类似于一个类可以有多个实例; ... -
Java去除字符串中的空格、回车、换行符、制表符
2011-02-15 11:06 3559本方法采用的是java的正则表达式 import jav ... -
线程池编程
2011-01-23 21:02 1107线程池编程 -
设计模式:Java语言中的应用
2011-01-23 20:59 1325设计模式:Java语言中的应用 -
java用了中间缓存变量
2011-01-23 18:37 2405Java语法、语言特性与机制 2011-01-22 19:1 ... -
Java集合总结
2011-01-19 11:16 3825Set:不区分元素的顺序,不允许出现重复的值list:区分元素 ... -
java.util.current的主要方法简介
2011-01-08 22:18 3438JDK5中增加了Doug Lea的并发库,这一引进给java线 ... -
线程池
2011-01-08 21:03 2073对每个客户都分配一个新的工作线程。当工作线程与客户通信结束,这 ... -
SimpleDateFormat
2010-12-10 16:11 1366With SimpleDateFo ... -
使用 XStream 在 JavaBean 与 XML/JSON 之间相互转换
2010-12-10 14:24 1565XML 和 JSON 是当今常用的两种数据描述与传输的格式,特 ... -
Linux上JDK的 安装和卸载 详细 (转)
2010-11-27 15:48 1928安装 1. 去http://java.sun.com ... -
java 路径问题
2010-11-26 16:21 13051.JSP/Servlet中获得当前应用的相对路径和绝对路径 ... -
对synchronized(this)的一些理解
2010-11-25 23:41 1029一、当两个并发线程访问同一个对象object中的这个synch ... -
Externalizable
2010-11-20 22:41 1366被Serializable接口声明的类的对象的内容都将被序列化 ... -
Java实现文件拷贝的4种方法(转)
2010-11-15 12:33 1253... -
Java内省和反射机制三步曲之 - 内省
2010-11-11 12:15 1346经过多方面的资料搜集整理,写下了这篇文章,本文主要讲解java ... -
java内省机制
2010-11-11 11:10 2401反射 (Reflection):反射就是让你可以通 ... -
Design Pattern: Thread-Specific Storage 模式
2010-11-11 00:00 1216无论如何,要编写一个多执行绪安全(thread-safe)的程 ...
相关推荐
本资源“DesignPattern::pencil:设计模式_java实现以及详解”提供了一套详细的学习材料,帮助开发者理解和应用设计模式。 该资源的作者是“养码青年-Style”,他通过这个项目记录了自己的设计模式学习过程。鼓励...
DesignPattern-master这个压缩包可能包含了一个关于设计模式的项目或者教程资源。 设计模式分为三类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)和行为型模式(Behavioral Patterns)...
"designPattern:设计模式相关代码实现"这个项目,显然提供了不同设计模式在Java语言中的实际应用示例。 在Java世界里,设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。每种模式都针对特定的编程问题...
这个名为"DesignPattern"的压缩包文件很可能包含了一个Java实现的各种设计模式的示例程序。 在这个"DesignPattern-master"目录中,我们可以期待找到一系列与设计模式相关的Java源代码文件(.java),每个文件或...
23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm”供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) 生成...
设计模式是软件工程中的一种最佳实践,它是在特定情境下解决常见问题的经验总结。...在DesignPattern-master这个压缩包中,你可以找到关于这些模式的详细讲解和实例代码,为你的Java开发之旅提供宝贵的参考资料。
这个名为"Design-pattern:设计模式"的压缩包可能包含了一个关于设计模式的学习资源,比如代码示例或者教程。 创建型设计模式是设计模式中的一个类别,主要关注对象的创建过程。这类模式包括工厂方法(Factory ...
本资料包“JAVA 23种设计模式(全).Design Pattern_Java模式”涵盖了所有23种经典的GOF(GoF,Gang of Four)设计模式,旨在帮助开发者深入理解和应用这些模式。 首先,我们来看一下23种设计模式的分类: 1. **创建...
本教程的"designpattern-master"可能包含以上各种设计模式的实例代码和详细解释,帮助学习者通过实践掌握这些模式。在实际项目中,灵活运用这些设计模式可以提高代码质量,使项目更加健壮和易于维护。对于PHP开发者...
### Design Pattern(设计模式)讲义 #### 一、引言 设计模式是软件工程领域的一个重要主题,它提供了一套解决常见问题的方案。侯捷老师的讲义为我们揭示了设计模式背后的原理与实践方法。这份讲义不仅包含了GoF...
设计模式(Design Pattern)是软件工程中用于解决软件设计问题的既定方案。设计模式并非直接的代码实现,而是一套被验证过的通用解决方案模板。它们是由经验丰富的软件开发者总结出的,在特定上下文中对常见问题的...
设计模式(Design Pattern)是软件工程中的一种经验总结,它是在特定上下文中为解决常见问题而提出的一套可复用的解决方案。设计模式并不直接实现为代码,而是提供了一种在面向对象设计中如何处理常见问题的指南。...
本资料库中的"design pattern设计模式范例"提供了23种经典设计模式以及最新的范式用法,非常适合用于项目重构或作为学习设计模式的参考。 首先,我们来看23种经典的设计模式,它们通常分为三类:创建型、结构型和...
在“阅读java源码-JavaDesignPattern:23种设计模式Java实现”中,我们将深入探讨这23种设计模式的Java实现。 1. **创建型模式**(Creational Patterns): - **单例模式(Singleton)**:确保一个类只有一个实例,...
包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、责任链模式(Chain of Responsibility)、命令模式(Command)、备忘录模式(Memento)、解释器模式...
### C语言设计模式知识点概述 #### 一、C语言与设计模式 在计算机科学领域,设计模式是指在软件设计过程中解决常见问题的一套被广泛接受的解决方案。虽然设计模式最初是在面向对象编程语言中被广泛应用的,但也...
3. 行为型设计模式:例如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录模式(Memento)、状态...
本资源"design-pattern:标准设计模式的实施"很可能是关于如何在Java中应用经典设计模式的详细指南。 设计模式分为三大类:创建型模式、结构型模式和行为型模式。每种模式都有其特定的目的和应用场景。 1. 创建型...
本资料"Swift DesignPattern"包含了一些Swift语言中的常见设计模式实例,下面我们将详细探讨这些设计模式及其在Swift中的应用。 1. **单例模式(Singleton)**:单例模式确保一个类只有一个实例,并提供全局访问点...