登陆注册
11030400000139

第139章 7 备忘录模式的实现

小A:“备忘录模式要怎么去实现?”

大B:“我详细给你说。”

1、备忘录模式中的角色

发起人:创建含有内部状态的备忘录对象,并使用备忘录对象存储状态。

负责人:负责人保存备忘录对象,但不检查备忘录对象的内容。

备忘录:备忘录对象将发起人对象的内部状态存起来,并保证其内容不被发起人对象之外的对象像读取。

注意:在备忘录的角色中,定义了他必须对不同的人提供不同的接口,对发起人提供宽接口,对其它任何人提供窄。

接口:也许你说我都提供宽接口了。这也是备忘录的一种实现,叫做白箱备忘录,不过这种方法的封装没有设计。好,安全性不够好。

2、白箱备忘录的实现:

public class Originator{

private String state;

public Memento CreateMemento(){

return new Memento(state);

}

public void restoreMemento(Memento memento){

this。state=memento。getState();

}

public String getState(){

return this。state;

}

public void setState(String state){

this。state=state;

System。out。println(“Current state=” this。state);

}

}

public class Memento{

private String state;

public Memento(String state){

this。state=state;

}

public String getState(){

return this。state;

}

public void setState(){

this。state=state;

}

}

public class Caretaker{

private Memento memento;

public Memento retrieveMemento(){

return this。memento;

}

public void saveMemento(Memento memento){

this。memento=memento;

}

}

public class Client{

private static Originator o=new Originator();

private static Caretaker c=new Caretaker();

public static void main(Sting[]args){

o。setState(“ON”);

c。saveMemento(o。createMemento());

o。setState(“OFF”);

o。restoreMemento(c。retrieveMemento());

}

}

白箱的优点:实现简单。

白箱的缺点:上边说了,破坏了封装,安全性有些问题。

说明:这里白箱的实现只保存了一个状态,其实是可以保存多个状态的。

3、双接口的实现,宽窄接口(黑箱)

如何实现宽窄接口呢?内部类也许是个好方法。我们把备忘录类设计“成发起人”的内部类,但这样还有的问题是同一package中的其它类也能访问到,为了解决这个问题,我们可以把“备忘录”的方法设计成私有的方法,这样就可以保证封装,又保证发起人能访问到。实现如下:

定义窄接口。

public interface NarrowMemento{

public void narrowMethod();

}

class Originator{

private

String state;

private NarrowMemento memento;

public Originator(){

}

public NarrowMemento createMemento(){

memento=new Memento(this。state);

return memento;

}

public void restoreMemento(NarrowMemento memento){

Memento aMemento=(Memento)memento;

this。setState(aMemento。getState());

}

public String getState(){

return this。state;

}

public void setState(String state){

this。state=state;

}

//内部类

protected class Memento implements NarrowMemento{

private String savedState;

private Memento(String someState){

saveState=someState;

}

private void setState(String someState){

saveState=someState;

}

private String getState()

{

return saveState;

}

public void narrowMethod(){

System。out。println(“this is narrow method”);

}

}

public NarrowMemento getNarrowMemento(){

return memento;

}

}

public class Caretaker{

private NarrowMemento memento;

public NarrowMemento retrieveMemento(){

return this。memento;

}

public void saveMemento(NarrowMemento memento){

this。memento=memento;

}

}

public class Client{

private static Originator o=new Originator();

private static Caretaker c=new Caretaker();

public static void main(String[]args){

//use wide interface

o。setState(“On”);

c。saveMemento(o。createMemento());

o。setState(“Off”);

o。restoreMemento(c。retrieveMemento());

//use narrow interface

NarrowMemento memento=o。getNarrowMemento();

memento。narrowMethod();

}

}

大B:“还要注意的是:1、前边两个例子都是记录了单个状态(单check点),要实现多个状态点很容易,只须要把记录state的字符串换成一个list,然后添加,取得。如果须要随机须得状态点,也可以用map来存放。这样多个check点就实现了。2、一般情况下可以扩展负责人的功能,让负责人的功能更强大,从而让客户端的操做更少些。解放客户端。3、自述历史模式,这个就是把发起人,负责人写在一个类中,平时的应用中这种方法比较常见。”

同类推荐
  • 防火墙之巅峰对决

    防火墙之巅峰对决

    铁路交通枢纽后台被控制,世界顶级中心城市即将被满载烈性爆炸物的火车撞击毁灭……这一切,都来源于黑客人侵。谁是幕后的主使者?谁又能拯救这濒危的一切?--情节虚构,请勿模仿
  • 小型局域网组建与维护

    小型局域网组建与维护

    本书以组建和维护小型局域网为主线,面向实际工程应用,按照项目化课程模式的要求组织编排。全书共分8个项目,主要包括认识计算机网络一概述、绘制小型网络拓扑图、连接网络一传输介质、连接网络一联网设备、认识计算机网络一网络协议、连接网络一网络寻址、组建小型交换网络——配置交换机、连接互联网——配置宽带路由器。每个项目都有明确的工作目标、工作任务、实现过程和知识点分析,力求集教、学、做于一体,从而更好地激发学生的学习兴趣,培养学生的动手能力。
  • 条形码技术与应用

    条形码技术与应用

    条形码是一种可供电子仪器自动识别的标准符号,是由一组黑白相间、粗细不同的条、空符号按一定编码规则排列组成的标记,用以表示一定的信息,确认某个物体或规定它的移动,能正确快速地为产、供、销各环节在采集、处理和交换信息时提供标识。
  • 三维动画审美谈

    三维动画审美谈

    数字时代,美的标准充满更多的不确定性。而三维动画以数字图像形式成为这个图时代的代表。三维动画及三维图像不仅仅是由于应用了仿真数字图像技术而带来的虚拟空间,还有更多的是由三维图像技术所引发或引导的被扩展的图像技术,这些技术无不应用在现代视觉设计领域的各个方面,并且,由此引起社会的追热,引起审美观念的改变。这些改变是在进行中的,变化中的,也是在发展中的。对于未知的美,我们做的只是追寻和记录,我们不知道以后的美将会是什么样,尽管我们苦苦追寻,孜孜探讨,同时也在默默审视。我们在追寻中享受美,在探讨中认知美,在审视中体验美……
  • 办公软件高级应用

    办公软件高级应用

    日新月异的信息技术使计算机的应用渗透到各行各业,融入到我们的工作、学习和生活中,特别是在办公领域中运用计算机技术,可以实现办公自动化,成倍地提高工作效率。在众多的办公软件中,微软公司的Office系列软件是办公自动化软件中的佼佼者,其强大的功能深受全世界广大用户的青睐。根据当前业界的需求以及办公软件的实际应用范围,本书针对Office 2003系列产品,深入讲解其高级应用知识和操作技能。
热门推荐
  • 夜太美

    夜太美

    子月和子夜他们的出生注定是不平凡的......当得知真相,复仇成了他们唯一的使命。拥有母亲极品道术的哥哥子月和拥有父亲无上魔力的弟弟子夜。日本天才阴阳师,会使用三味真火的少年,他们是敌是友?最后他们是否复仇成功?幕后的神秘人到底是何主神圣?请耐心的读完这本小说。.......
  • 旧事难掩

    旧事难掩

    唐铭从不曾忘记宋语,在最意气风发的年代,他自以为万事皆在掌握,包括宋语。后来,他眼见那人一言不发离开,成为自己二十几年辉煌历程中唯一的败笔。不甘,愤恨,羞辱,折磨,直至再不相见。时光荏苒,那些难言的往事都已成过去。最后他说:宋语,我的以后都给了你。旧事如流水,我就在河流的对岸守望你。而你,可愿渡河归来……
  • 拳豪传

    拳豪传

    吴风一直在看着她们成长,看着她们经历一切世间浮沉,以为自己将会守护她们永远...最后才发现,原来那样的自己反而一次次伤害着最为珍贵的她。
  • 不及皇叔貌美

    不及皇叔貌美

    爱了十年的男人,为了迎娶别人,要烧死她!临死前,有人从天而降,救她出了火海。“你想做什么,我都帮你。”沈故渊道:“只要你最后姻缘得成。”“我要报仇!”池鱼咬牙:“要让那对狗男女付出血的代价!”只是,报仇归报仇,这么凶狠的女人,姻缘始终没个着落。--情节虚构,请勿模仿
  • 生态伦理小常识(人与环境知识丛书)

    生态伦理小常识(人与环境知识丛书)

    生态伦理学是一门前沿性的学科,但它并不是一门深奥的学科,我们每个人都应该对它有所了解,尤其是生态伦理关乎我们对待自然的态度。不一样的生态伦理观念,就会对应着不同的行为习惯,一个人究竟应该持有怎样的生态伦理观念?这在很大程度上决定于我们对生态伦理本身了解多少。
  • 首富千金VS拽校草

    首富千金VS拽校草

    贵族学校,到处充满着公主千金,公子少爷。而同样在贵气十足的圣约翰高中,一个首富千金与拽拽校草不期而遇,于是,他们的故事便是从这圣约翰高中开始……
  • 乖女也同居

    乖女也同居

    蓝楹儿,一个普通的外语系大学生,因为拖欠学费被派给前来视察的董事长孙子做翻译。说是翻译其实就是女佣。
  • exo之刺青

    exo之刺青

    未来是无穷无尽的冒险,伯贤等我-肜妤馨如果不是你,也许我并不懂的什么是爱-伯贤猪,我喜欢你,我们在一起吧——金钟仁守护了一生,到头来还是一场空——鹿晗
  • 距离幸福一光年

    距离幸福一光年

    张赫,一个阳光帅气的小伙子,却从小被父母抛弃,始终对父母有一种敌意。他努力奋斗,开创了自己的一片天地。英俊的外貌与杰出的能力,使它成为女生心目中的白马王子,为他倾情。云溪,雨红本是姐妹的她们喜欢上同一个人,三个人的爱情会有怎样的纠葛?和云溪长相相似的天雪最终情归何处……
  • 诚缘旧爱

    诚缘旧爱

    他掐着她的脖子,温柔的笑容里是蚀骨的狠毒!这个男人居然威胁她下嫁!婚后,不但限制她的人身自由,把她当成佣人使用,让她亲眼目睹唯一好友的背叛,只为让她彻底堕入痛苦的深渊!