欢迎来到天天文库
浏览记录
ID:40051887
大小:2.38 MB
页数:27页
时间:2019-07-18
《c设计模式备忘录模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、DesignPatterns备忘录模式刘伟(Sunny)weiliu_china@126.com大纲备忘录模式概述备忘录模式的结构与实现备忘录模式的应用实例实现多次撤销备忘录模式的优缺点与适用环境备忘录模式概述备忘录模式——软件中的“后悔药”——撤销(Undo)备忘录模式概述分析通过使用备忘录模式可以让系统恢复到某一特定的历史状态首先保存软件系统的历史状态,当用户需要取消错误操作并且返回到某个历史状态时,可以取出事先保存的历史状态来覆盖当前状态备忘录模式概述备忘录模式的定义对象行为型模式备忘录模式:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这
2、样就可以在以后将对象恢复到原先保存的状态。MementoPattern:Withoutviolatingencapsulation,captureandexternalizeanobject'sinternalstatesothattheobjectcanberestoredtothisstatelater.备忘录模式概述备忘录模式的定义别名为标记(Token)模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤当前在很多软件所提供的撤销(Undo)操作中就使用了备忘录模式备忘录模式的结构与实现备忘录模式的结构备忘录模式的结构与实现备忘录模式的结构备忘
3、录模式包含以下3个角色:Originator(原发器)Memento(备忘录)Caretaker(负责人)备忘录模式的结构与实现备忘录模式的实现典型的原发器类代码:namespaceMementoSample{publicclassOriginator{privatestringstate;publicOriginator(stringstate){this.state=state;}//创建一个备忘录对象internalMementoCreateMemento(){returnnewMemento(this);}//根据备忘录对象恢复原发器状态internalvoidRe
4、storeMemento(Mementom){state=m.GetState();}publicvoidSetState(stringstate){this.state=state;}publicstringGetState(){returnthis.state;}}}备忘录模式的结构与实现备忘录模式的实现典型的备忘录类代码:namespaceMementoSample{//备忘录类,默认可见性,在程序集内可见internalclassMemento{privatestringstate;internalMemento(Originatoro){state=o.GetSt
5、ate();}internalvoidSetState(stringstate){this.state=state;}internalstringGetState(){returnthis.state;}}}备忘录模式的结构与实现备忘录模式的实现除了Originator类,不允许其他类来调用备忘录类Memento的构造函数与相关方法如果允许其他类调用SetState()等方法,将导致在备忘录中保存的历史状态发生改变,通过撤销操作所恢复的状态就不再是真实的历史状态,备忘录模式也就失去了本身的意义理想的情况是只允许生成该备忘录的原发器访问备忘录的内部状态备忘录模式的结构与实现
6、备忘录模式的实现C#语言实现:将Memento类与Originator类定义在同一个程序集(Assembly)中来实现封装,使用访问标识符internal来定义Memento类,即保证其在程序集内可见将备忘录类作为原发器类的内部类,使得只有原发器才可以访问备忘录中的数据,其他对象都无法使用备忘录中的数据备忘录模式的结构与实现备忘录模式的实现典型的负责人类代码:namespaceMementoSample{publicclassCaretaker{privateMementomemento;internalMementoGetMemento(){returnmemento;}
7、internalvoidSetMemento(Mementomemento){this.memento=memento;}}}备忘录模式的结构与实现备忘录模式的实现客户端演示代码:usingSystem;namespaceMementoSample{classProgram{staticvoidMain(string[]args){//创建原发器对象Originatorori=newOriginator("状态(1)");Console.WriteLine(ori.GetState());//创建负责人对象,保存创
此文档下载收益归作者所有