pengpenglin
人,必须选择一种生活方式并有勇气坚持下去
BlogJava
首页
新随笔
新文章
联系
聚合
管理
posts - 262, comments - 221, trackbacks - 0
设计模式总结-Memento模式(一)
一、Memento模式的目的:
memento是一个
保存另外一个对象内部状态拷贝
的对象.这样以后就可以将该对象
恢复到原先保存的状态
.
二、Memento模式的简单例子:
下面的例子来源于Jdon网站的《GoF设计模式系列》的《Memento模式》,虽然简单却形象地表明了Memento模式的应用
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.number;
file
=
m.file;
}
}
private
class
Memento
implements
java.io.Serializable
{
private
int
number;
private
File file
=
null
;
public
Memento( Originator o)
{
number
=
o.number;
file
=
o.file;
}
}
三、Memento模式的特点:
在需要提供保存、恢复对象状态的类中,必须提供两个方法:
.保存对象当前状态方法:将对象自身(this)作为参数传入,创建备忘录。
.恢复对象之前状态的方法:取出备忘录/接收一个备忘录对象,从中获取对象之前的状态
模式的缺点是耗费大,如果内部状态很多,再保存一份,无意要浪费大量内存.
注意:Memento模式保存的是操作前对象的状态,而不是操作后对象的状态;否则就没办法做恢复了
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
posted on 2008-03-22 17:56
Paul Lin
阅读(2195)
评论(0)
编辑
收藏
所属分类:
模式与重构
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
设计模式总结-Visitor模式
设计模式总结-Strategy模式
设计模式总结-State模式
设计模式总结-Command模式
设计模式总结-Memento模式(二)
设计模式总结-Memento模式(一)
设计模式总结-Observer模式
设计模式总结-Flyweight模式
设计模式总结-Bridge模式
设计模式总结-Decorator模式(二)
<
2008年3月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(21)
给我留言
查看公开留言
查看私人留言
随笔分类
J2EE 框架(9)
J2EE基础(4)
J2SE(43)
Java 工具(5)
Oracle Concept(4)
Oracle SQL/PLSQL(9)
Oracle 开发(13)
Oracle 管理(4)
Oracle 调优
Oracle 错误诊断
RoR(19)
UML(3)
Unix / Linux(13)
Web基础(19)
其它技术(7)
感悟(3)
杂项(7)
架构与性能(8)
模式与重构(19)
灌水(8)
电影与音乐(16)
走过的路(1)
软件过程与软件方法(3)
阳光户外(2)
项目管理(36)
随笔档案
2012年2月 (3)
2011年11月 (4)
2011年10月 (1)
2011年9月 (2)
2011年8月 (2)
2011年7月 (5)
2011年6月 (3)
2011年5月 (1)
2011年4月 (1)
2011年3月 (3)
2011年1月 (1)
2010年12月 (1)
2010年11月 (5)
2010年10月 (3)
2010年9月 (1)
2010年7月 (1)
2010年6月 (1)
2010年5月 (4)
2010年4月 (9)
2010年3月 (19)
2010年2月 (8)
2010年1月 (3)
2009年12月 (34)
2009年11月 (1)
2009年10月 (2)
2009年7月 (4)
2009年6月 (5)
2009年5月 (3)
2009年4月 (2)
2009年3月 (1)
2009年2月 (5)
2009年1月 (5)
2008年12月 (13)
2008年11月 (4)
2008年10月 (1)
2008年9月 (6)
2008年8月 (5)
2008年7月 (3)
2008年6月 (31)
2008年5月 (10)
2008年4月 (9)
2008年3月 (7)
2008年2月 (4)
2008年1月 (19)
BlogJava热点博客
BeanSoft
Jack.Wang
如坐春风
诗特林
郑晖
银河使者
阿密果
隔叶黄莺
好友博客
无羽苍鹰
搜索
最新评论
1. re: 【Java基础专题】编码与乱码(01)---编码基础[未登录]
666666666666666666666这几天正在做个类似工程编码出现错误
--李
2. re: 【Java基础专题】IO与文件读写---使用Apache commons IO简化文件读写
不错
--阿斯兰
3. re: 【Java基础专题】编码与乱码(03)----String的toCharArray()方法
多谢分享
--thx
4. re: 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换
评论内容较长,点击标题查看
--karl
5. re: 【Java基础专题】编码与乱码(01)---编码基础[未登录]
谢谢,帮了我大忙!
--小龙
阅读排行榜
1. Oracle中如何插入特殊字符:& 和 ' (多种解决方案)(48373)
2. getOutputStream() has already been called for this response的解决方法(43328)
3. 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换(36966)
4. 360安全卫士误删audiosrv.dll文件造成系统无声的解决方案(21211)
5. Java中读取字节流并按指定编码转换成字符串的方法(17301)
评论排行榜
1. 360安全卫士误删audiosrv.dll文件造成系统无声的解决方案(33)
2. 【原】Oracle开发专题之:时间运算(11)
3. 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换(11)
4. getOutputStream() has already been called for this response的解决方法(10)
5. 【原】Oracle开发专题之:分析函数(OVER)(8)