登陆注册
8183300000137

第137章 5“月光宝盒”备忘录模式的组成部分

小A:“那‘月光宝盒’备忘录模式有哪些组成部分?”

大B:“1、备忘录(Memento)角色:备忘录角色存储‘备忘发起角色’的内部状态。‘备忘发起角色’根据需要决定备忘录角色存储‘备忘发起角色’的哪些内部状态。为了防止‘备忘发起角色’以外的其他对象访问备忘录。备忘录实际上有两个接口,‘备忘录管理者角色’只能看到备忘录提供的窄接口――对于备忘录角色中存放的属性是不可见的。‘备忘发起角色’则能够看到一个宽接口――能够得到自己放入备忘录角色中属性。2、备忘发起(Originator)角色:‘备忘发起角色’创建一个备忘录,用以记录当前时刻它的内部状态。在需要时使用备忘录恢复内部状态。3、备忘录管理者(Caretaker)角色:负责保存好备忘录。不能对备忘录的内容进行操作或检查。称它为宽接口;而另一个则可以只是一个标示,称它为窄接口。备忘录角色要实现这两个接口类。这样对于‘备忘发起角色’采用宽接口进行访问,而对于其他的角色或者对象则采用窄接口进行访问。这种实现比较简单,但是需要人为的进行规范约束――而这往往是没有力度的。第二种方法便很好的解决了第一种的缺陷:采用内部类来控制访问权限。将备忘录角色作为‘备忘发起角色’的一个私有内部类。好处就不详细解释了,看看代码就明白了。下面的代码是一个完整的备忘录模式的程序。它便采用了第二种方法来实现备忘录模式。还有一点值得指出的是,在下面的代码中,对于客户程序来说‘备忘录管理者角色’是不可见的,这样简化了客户程序使用备忘录模式的难度。下面采用‘备忘发起角色’来调用访问‘备忘录管理者角色’,也可以参考外观模式在客户程序与备忘录角色之间添加一个外观角色。”

class Originator{

//这个是要保存的状态

private int state=90;

//保持一个“备忘录管理者角色”的对象

private Caretaker c=new Caretaker();

//读取备忘录角色以恢复以前的状态

public void setMemento(){

Memento memento=(Memento)c。getMemento();

state=memento。getState();

System。out。println(“the state is” state “now”);

}

//创建一个备忘录角色,并将当前状态属性存入,托给“备忘录管理者角色”存放。

public void createMemento(){

c。saveMemento(new Memento(state));

}

//this is other business methods……

//they maybe modify the attribute state

public void modifyState4Test(int m){

state=m;

System。out。println(“the state is” state “now”);

}

//作为私有内部类的备忘录角色,它实现了窄接口,可以看到在第二种方法中宽接口已经不再需要

//注意:里面的属性和方法都是私有的

private class Memento implements MementoIF{

private int state;

private Memento(int state){

this。state=state;

}

private int getState(){

return state;

}

}

}

//测试代码――客户程序

public class TestInnerClass{

public static void main(String[]args){

Originator o=new Originator();

o。createMemento();

o。modifyState4Test(80);

o。setMemento();

}

}

//窄接口

interface MementoIF{}

//“备忘录管理者角色”

class Caretaker{

private MementoIF m;

public void saveMemento(MementoIF m){

t his。m=m;

}

public MementoIF getMemento(){

return m;

}

}

大B:“第三种方式是不太推荐使用的:使用clone方法来简化备忘录模式。由于Java提供了clone机制,这使得复制一个对象变得轻松起来。使用了clone机制的备忘录模式,备忘录角色基本可以省略了,而且可以很好的保持对象的封装。但是在为你的类实现clone方法时要慎重!在上面的代码中,简单的模拟了备忘录模式的整个流程。在实际应用中,往往需要保存大量‘备忘发起角色’的历史状态。这时就要对‘备忘录管理者角色’进行改造,最简单的方式就是采用容器来按照顺序存放备忘录角色。这样就可以很好的实现undo、redo功能了。”

同类推荐
  • Delphi程序设计教程

    Delphi程序设计教程

    本书为适应不同层次读者的需要,从Delphi的基本知识讲起,由浅入深,全面讲述了Delphi的集成开发环境、Delphi的编程语言——ObjectPascal、常用组件的使用、窗体的设计、菜单的设计、对话框的设计、多文档界面程序的设计、多媒体编程和数据库应用程序设计等内容。
  • 计算机网络技术与应用

    计算机网络技术与应用

    本书共8章,系统地介绍了计算机网络的发展和基本原理体系结构、局域网、广域网、网络服务、网络安全、典型网络的结构特点等内容。除第8章外,其他各章都附有练习题。为了加强学习效果,本书围绕知识点的典型性,精选了6个实验。此外,在本书的第8章,我们综合各章知识设计了“办公局域网组建设计”和“中小型企业局域网组建设计”这两个常用的计算机网络技术应用实例,供学生学习和参考。本教材适合作为本科非计算机专业学生的计算机网络教材。
  • 一本书读懂大数据

    一本书读懂大数据

    本书是深入研究互联网思维的经典之作,从互联网思维的定义到互联网思维应用的具体案例表现。作者深入浅出、条分缕析,全面阐述互联网思维的内核与精神,逐一点评当前关于互联网思维的各种观点。本书从最初级的互联网思维应用到高端的粉丝经济,平台建设,自媒体营销的方法都有详细讲解介绍。让读者了解什么是互联网思维的同时还能学会把互联网思维运用到自己的工作学习已经生活中。
  • 《Internet实用技术》作业集

    《Internet实用技术》作业集

    随着计算机应用的普及和社会信息化水平的提高,Internet已走进我们的生活。《Internet实用技术》这门课将带领我们走进网络的神秘殿堂,让我们认识网络,了解网络,进而学会使用网络,维护网络。其范围涵盖了在授课过程中所讲授的内容,题型多样,内容丰富,并附有两套模拟题,最后附有答案。学生可按照课程进度做习题来巩固和掌握知识。本作业集由李琳编写,由西北工业大学网络教育学院负责组稿和审定。因为时间仓促,水平有限,错误和不当之处在所难免,敬请读者批评指正。
  • 纵横于天地之间——互联网络技术

    纵横于天地之间——互联网络技术

    本书告诉你:不管你是谁,只要生活在当前的时代,你一定知道电话,知道电脑,知道上网……知道许许多多关于电子、关于计算机、关于网络的话题,这就是网络时代。网络的话题可多了:它是怎么来的?什么是“蜘蛛网”?网络的过去和现在,上网的方法,如何使用网络,互联网的安全,网络有“陷阱”吗?网络有“瘾”吗?网络文化和未来又是怎样的?到书中去找答案吧!
热门推荐
  • 大墓探

    大墓探

    在利益的驱使之下,人们纷纷投身于盗墓行动。无数的民间集团参与盗墓,甚至连外国人也加入其中,这对我国文物造成了无法挽留的损失。这引起了国家的高度重视,于是政府四处寻访高人,并组建了一支队伍:大墓密探。谢老大。身为大墓密探领头人的他,义不容辞地投身于与盗墓团伙的斗争之中。斗争过程危机四伏,惊险跌出。虽然异常艰辛,却从不放弃。温老三、刘老二、独眼镖等人,追随谢老大一同战斗,演绎着属于他们的精彩人生!一歌的第一本书——《大墓探》,需要大家的支持!
  • 雪国无雪

    雪国无雪

    肖铉,一个雪国皇位的继承者,在失去一切后,他会找到属于他的幸福吗?
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 荒洲古迹

    荒洲古迹

    主人公在一次偶然的机会进入到另一个世界,在与伙伴的交往中经历了不平凡的故事……那是一片神秘的领域。
  • 中国小小少年百科全书(Y~Z卷)

    中国小小少年百科全书(Y~Z卷)

    《中国小小少年百科全书(Y-Z卷)》收录了我是核武器,看看我到底多厉害、核武器来了、我们躲在哪里好、谁是中国的铀矿之父、给核电站建造一座大“石棺”等内容。每个内容都选取孩子感兴趣、能提升科学素养的主题,运用科学的体系架构,趣味化、故事化、体系化呈现科学知识,让孩子在趣味阅读的同时,提升科学素养、扩展眼界、充实知识体系。
  • 修真小和尚

    修真小和尚

    小庙太小,一共就仨和尚,一个师兄,一个师傅,再就是他这么一个刚刚进入行当的小师弟。小庙的名字?也没有。反正那就是庙,反正他也是和尚。却是没戒疤的和尚。
  • 愿雪之空传说

    愿雪之空传说

    这一片天空,偶尔会落下蓝色的雪,因为据说这时许愿,梦想就会成真,所以这蓝色的雪被称之为愿雪,这片天空也就叫做愿雪之空。愿雪之空下的世界,当众神已经离去,人们开始了新的生活。
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 不完美娇妻:首席的101次索吻

    不完美娇妻:首席的101次索吻

    修长的手指挑起面前衣着清凉的女孩的下巴,鼻息间灼热的空气打在女孩干净的脸上,“就凭你也想嫁入顾家,不好意思,小姐,你是?”女孩抬起清澈的眸子,直直的看入面前男人的眼睛,“我是谁不重要,先生,我赶时间,麻烦你快些。”豪门难入,既然进来了,女人,乖乖呆在我身边!
  • 误入总裁怀抱:甜妻太迷人

    误入总裁怀抱:甜妻太迷人

    (甜宠文~片段一:“落少爷,有人骂雨小姐是野种”“胶水把嘴粘住,欺负我的女人活腻了”片段二:“金少,舞会的时候雨小姐被扇巴掌了”“哪只手扇的剁哪只手”