//备忘录模式定义:
//在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
//这样以后就能够将该对象恢复到原先保存的状态
//实例:測试两种方案。两种方案在第一阶段的过程是同样的,第二阶段是不同的
//实例代码
//备忘录对象的窄接口
public interface FlowAMockMemento {
//空的,所谓窄接口,即仅仅是一个标识作用,它的持有者不能够调用不论什么它的方法
}
//測试流程类
public class FlowAMock {
private String flowName;
private int tempResult;
private String tempState;
public FlowAMock(String flowName) {
this.flowName = flowName;
}
public void runPhaseOne() {
tempResult = 3;
tempState = "PhaseOne";
}
public void shema1() {
this.tempState += ",Schema1";
System.out.pritnln(this.tempState+":now run"+tempResult);
this.tempResult += 11;
}
public void schema2() {
this.tempState += ",Schema2";
System.out.pritnln(this.tempState+":now run"+tempResult);
this.tempResult += 22;
}
public FlowAMockMemento createMemento() {
return new MementoImpl(this.tempResult, this.tempState);
}
public void setMemento(FlowAMockMemento memento) {
MementoImpl mementoImpl = (MementoImpl)memento;
this.tempResult = mementoImpl.getTempResult();
this.tempState = mementoImpl.getTempState();
}
private static class MemetoImpl implements FlowAMockMemento {
private int tempResult;
private String tempState;
public MemetoImpl(int tempResult, String tempState) {
this.tempResult = tempResult;
this.tempState = tempState;
}
public int getTempResult() {
return tempResult;
}
public int getTempState() {
return tempState;
}
}
}
//备忘录管理类
public class FlowAMementoCareTaker {
private FlowAMockMemento memento = null;
public void saveMemento(FlowAMockMemento memento) {
this.memento = memento;
}
public FlowAMockMemento retriveMemento() {
return this.memento;
}
}
//client
public class Client {
public static void main(String[] args) {
FlowAMock mock = new FlowAMock("TestFlow");
mock.runPhaseOne();
FlowAMementoCareTaker careTaker = new FlowAMementoCareTaker();
FlowAMockMemento memento = mock.createMemento();
careTaker.saveMemento(memento);
mock.schema1();//执行第一种方案
mock.setMemento(careTaker.retriveMemento());//恢复数据
mock.schema2();//执行另外一种发难
}
}
//备忘录模式本质:保存和恢复内部状态
//长处:更好的封装性。因为使用了内部类和窄接口,所以外部就算持有备忘录接口对象也无法訪问当中的属性
//备忘录模式中内部内和窄接口是最给力的设计,这样给把对象的接口给外部保存
//可是接口中没有方法,所以外部无法访问。充分保证了封装
//只需要创建它的主要技能是其价值和获得足够的

版权声明:本文博客原创文章,博客,未经同意,不得转载。

备忘录模式设计模式入门Memento的更多相关文章

  1. 折腾Java设计模式之备忘录模式

    原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...

  2. [工作中的设计模式]备忘录模式memento

    一.模式解析 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象.备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把 ...

  3. 深入浅出设计模式——备忘录模式(Memento Pattern)

    模式动机 为了使软件的使用更加人性化,对于误操作,我们需要提供一种类似“后悔药”的机制,让软件系统可以回到误操作前的状态,因此需要保存用户每一次操作时系统的状态,一旦出现误操作,可以把存储的历史状态取 ...

  4. [设计模式] 18 备忘录模式Memento Pattern

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对备忘录模式是这样说的:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存 ...

  5. 我所理解的设计模式(C++实现)——备忘录模式(Memento Pattern)

    概述: 我们玩单机游戏的时候总会遇到老婆大人的各位事情,一会去买瓶醋了,一会去打个酱油了,会耽误我们玩游戏的进程,但是此时我们能有“保存游戏”这个宝贝,我们的主基地不会在我们打酱油的时候被对手拆掉. ...

  6. 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)

    原文:乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) 作者:webabc ...

  7. 设计模式20---设计模式之备忘录模式(Memento)(行为型)

    1.讲解备忘录模式 备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式. 1.1定义 在不破坏封 ...

  8. 【Unity与23种设计模式】备忘录模式(Memento)

    GoF中定义: "在不违反封装的原则下,获取一个对象的内部状态并保留在外部,让对象可以在日后恢复到原先保留时的状态." 对于一些需要存储的数据,比如历史最高分 当与得分减分系统写入 ...

  9. 备忘录模式 Memento 快照模式 标记Token模式 行为型 设计模式(二十二)

    备忘录模式 Memento   沿着脚印,走过你来时的路,回到原点.     苦海翻起爱恨   在世间难逃避命运   相亲竟不可接近   或我应该相信是缘份   一首<一生所爱>触动了多少 ...

随机推荐

  1. abstract修饰方法总结

    abstract这种方法修饰,主要用在抽象类和抽象方法. 抽象的类是不可实例化的比如 public abstract class Test{ } 他能够含有抽象的方法 public abstract ...

  2. hdu3873 有约束条件的最短路

    题目大意:美国佬打算入侵火星,火星上有n个城市,有些城市可能受其他城市保护, 如果i城市受j城市保护,那么你必须先攻占j城市才能再攻占i城市,问你攻占城市n的最短时间是多少. 数据解释: 给定t, 表 ...

  3. [置顶] 利用CXF发布webService的小demo

    其实webService的发布不仅仅只有xfire,今天,给大家介绍一下用CXF发布一个webService的小demo,CXF也是我做webService用的第一个框架... 先将相关的jar引进来 ...

  4. Android实战技术:IPC方式简介教程

    非实时,通知性的方式 第一种方式就是Intent,Intent可以非常方便的通讯,但是它是非实时的,无法进行实时的像函数调用那样的实时的通讯. 实时的函数调用 但是IPC的根本目的还是为了实现函数的调 ...

  5. 在VC/MFC中嵌入Google地图——图文并茂

    近期须要实验室须要将在无人机地面站中嵌入地图,在网上找了非常多资料,最终有些眉目了, 首先.做这个须要用到的知识有.MFC控件.MFC类库.JavaScript脚本语言.Google API.Goog ...

  6. SQL Server数据库视图

    1:什么是视图 2:视图和查询的区别 3:视图的优点 4:如何创建和管理视图 5:如何通过视图修改基本表的数据 6:如何通过视图实现数据的安全性 A:什么是视图: 视图(view):从一个或几个基本表 ...

  7. SICP 锻炼 (2.15)解决摘要:深入思考间隔误差

    SICP 2.15 是接着 题目 2.14 的, 题目 2.14中提到了Alyssa设计的区间计算模块在并联电阻计算时会出现故障,这个问题是Lem发现的. 接着,一个叫Eva的人也发现了这个问题.同一 ...

  8. 抓取csdn上的各类别的文章 (制作csdn app 二)

    转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/23532797 这篇博客接着上一篇(Android 使用Fragment,View ...

  9. 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)

    原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...

  10. 【剑指offer】删除字符也出现在一个字符串

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27110873 剑指offer上的字符串相关题目. 题目:输入两个字符串,从第一字符串中删除 ...