- 浏览: 109814 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
lang_meng:
为什么要这样呢?
json在js里用eval解析的问题 -
花岗岩:
简单且精辟
include指令与include动作 -
chenpingtai2008:
你好,在学习velocity,看了你文章,有些疑问帮忙解答下吧 ...
velocity 学习进阶 -
gatusso52:
另有一篇文章那么在一个完整的J2EE系统中应该如何进行合理的设 ...
PO、VO、FormBean
1 解决问题:
一些对象的状态可能需要“回滚”,
于是用一个“memoto”保存原状态,必要的时候再返回
2 解决方法:
一个备忘录的生成者Original类,它其实就是那个“可能需要回滚状态”的类。里面有一个creatMemoto()方法和一个rollbackByMemoto()方法
一个备忘录类Memoto,存储Original对象的状态
一个备忘录的管理类CareTaker(),用于保管Memoto(封装)。它有一个memoto的域,并提供setter和getter
形如:
Original
public class Original { private String state1; private String state2; public Memoto creatMemoto(){ Memoto m = new Memoto(); m.setState1(state1); m.setState2(state2); return m; } public void rollbackByMemoto(Memoto m){ this.state1 = m.getState1(); this.state2 = m.getState2(); } public String getState1() { return state1; } public void setState1(String state1) { this.state1 = state1; } public String getState2() { return state2; } public void setState2(String state2) { this.state2 = state2; } public Original(String state1, String state2) { super(); this.state1 = state1; this.state2 = state2; } @Override public String toString() { return this.state1 + " - " + this.state2; } }
Memoto
public class Memoto { private String state1; private String state2; public String getState1() { return state1; } public void setState1(String state1) { this.state1 = state1; } public String getState2() { return state2; } public void setState2(String state2) { this.state2 = state2; } }
CareTaker
public class CareTaker { Memoto memoto ; public Memoto getMemoto() { return memoto; } public void setMemoto(Memoto memoto) { this.memoto = memoto; } }
Client
public class Demo { public static void main(String[] args) { Original o = new Original("11","22"); CareTaker t = new CareTaker(); t.setMemoto(o.creatMemoto()); System.out.println(o); o.setState1("33"); o.setState2("44"); System.out.println(o); o.rollbackByMemoto(t.getMemoto()); System.out.println(o); } }
======================进阶===========================
4问题提出:
在第一篇备忘录模式里,Memoto可以给Original和外界同样的权限,这是违反封装原则的。
5 解决方法:
宽接口和窄接口
两种思路:
a 对Memoto实现不同权限的接口
b 使用内部类
6 实现:
第一种:
如何实现???
第二种:
public class Original { private String state1; private String state2; public Memoto creatMemoto(){ Memoto m = new Memoto(); m.setState1(state1); m.setState2(state2); return m; } public void rollbackByMemoto(NerrowMemoto m){ this.state1 = ((Memoto)m).getState1(); this.state2 = ((Memoto)m).getState2(); } public String getState1() { return state1; } public void setState1(String state1) { this.state1 = state1; } public String getState2() { return state2; } public void setState2(String state2) { this.state2 = state2; } public Original(String state1, String state2) { super(); this.state1 = state1; this.state2 = state2; } @Override public String toString() { return this.state1 + " - " + this.state2; } //*********inner class******************** protected class Memoto implements NerrowMemoto{ private String state1; private String state2; private String getState1() { return state1; } private void setState1(String state1) { this.state1 = state1; } private String getState2() { return state2; } private void setState2(String state2) { this.state2 = state2; } } }
public interface NerrowMemoto { }
public class CareTaker { NerrowMemoto memoto ; public NerrowMemoto getMemoto() { return memoto; } public void setMemoto(NerrowMemoto memoto) { this.memoto = memoto; } }
public class Demo { public static void main(String[] args) { Original o = new Original("11","22"); CareTaker t = new CareTaker(); t.setMemoto(o.creatMemoto()); System.out.println(o); o.setState1("33"); o.setState2("44"); System.out.println(o); o.rollbackByMemoto(t.getMemoto()); System.out.println(o); } }
发表评论
-
OO的原则
2009-06-22 02:59 8171 单一职责原则 一 ... -
解释器模式
2009-06-22 02:44 750用于文法分析中,平时很少用到,故省略 -
访问者模式
2009-06-22 01:52 7461解决问题: 有稳定的数据结构,易变的算法。 换句 ... -
迭代器模式
2009-06-21 16:52 706public interface A{ public AI ... -
中介者模式
2009-06-21 16:33 9961 解决问题 一群平级的对象要互相调用(通信),于是系统变得 ... -
策略模式
2009-06-21 16:18 7061 解决方案 一个固定的问题,但是有n中算法可以解决 ... -
责任链模式
2009-06-21 15:31 11471 解决问题 有不同的问题解决者,每人只负责一部分的类型的请 ... -
状态模式
2009-06-21 14:17 10291 解决问题 一个对象,有一系列的状态,每个状态对应一种 ... -
命令模式
2009-06-21 12:48 644面向对象的回调函数?? 1 解决问题 命令方发 ... -
享元模式
2009-06-20 14:53 8111 解决问题: 享元的意思,就是细粒度的对象 通过 ... -
装饰模式
2009-06-20 14:52 8921 解决问题: 一个基本的类,现在我想让它在创建的时 ... -
组合模式
2009-06-20 14:10 7251 解决问题 树形结构的一组对象 对象在不同的层次上,有的 ... -
外观模式
2009-06-20 13:53 6621 解决问题 层的概念: 底层有一堆类相互协作,此时如果高层 ... -
适配器模式
2009-06-20 13:41 7121 解决问题 已有一个功能类Adaptee,是可以解决a问题 ... -
工厂模式系列 + 反射改进
2009-06-20 02:14 8291 简单工厂模式 一个 ... -
原型模式
2009-06-20 01:45 8041 解决问题 一组对象,它们的属性都大同小异 现在 ... -
建造者模式
2009-06-20 01:23 8211 解决问题: 一个复杂对象 建造它可以拆成若干个步 ... -
模板方法模式
2009-06-20 00:37 664最常见的一种模式 就是一个抽象类里定义公有的不变的代码 ... -
桥接模式总结
2009-06-19 15:56 797目的: 一个系统可以从多个维度进行分类,而且每一维的 ... -
观察者模式总结
2009-06-19 09:56 9151 一对多关系。一个被 ...
相关推荐
备忘录模式的示例代码和文档,学习备忘录模式的参考资料。
备忘录模式.rar备忘录模式.rar备忘录模式.rar
设计模式之备忘录模式 设计模式之备忘录模式 设计模式之备忘录模式 设计模式之备忘录模式 设计模式之备忘录模式
备忘录模式Demo
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 备忘录模式java demo
java设计模式-备忘录模式源代码, 源码中为设计模式的工程源文件,已经测试过,没有问题。
设计模式-备忘录模式(讲解及其实现代码)
C#备忘录模式 代码例子 写的比较乱,呵呵
设计模式之备忘录模式的Java版本实现和UML类设计图
本例包含备忘录模式的C#实现,及一个应用案例,加深理解与运用。
备忘录模式C++实现,若理解有误,请留言指出。
备忘录模式在不破坏封装的前提下,记录一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态,本例中设置历次成绩,并记录和保存,最后返回最好成绩
C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式
责任链模式 备忘录模式 单(双)链表 显示 "正在加载,请稍后……" 原理 1、责任链模式: * 责任连模式的结构 责任连模式的类图非常简单,它由一个抽象地处理类和它的一组实现类组成: * 抽象处理类:抽象处理类中...
备忘录模式 C++ 实现
在备忘录模式里,一个备忘录是一个对象,它存储另一个对象(备忘录的原发器)在某个瞬间的内部状态。备忘的目的就是为了以后在需要的时候,可以将原发器对象的状态恢复(undo/rollback)到备忘录所保存的状态。 备忘...
Android备忘录模式简单Demo,实现通过memoto备忘录实体,实现游戏存档和读档的功能简单模拟,便于理解备忘录模式.同步博文:http://blog.csdn.net/qq_28690547/article/details/50708415
设计模式之备忘录 和 状态模式精讲 19.1 场景问题 19.1.1 开发仿真系统 考虑这样一个仿真应用,功能是:模拟运行针对某个具体问题的多个解决方案,记录运行过程的各种数据,在模拟运行完成过后,好对这多个解决...