c设计模式备忘录模式

c设计模式备忘录模式

ID:40051887

大小:2.38 MB

页数:27页

时间:2019-07-18

c设计模式备忘录模式_第1页
c设计模式备忘录模式_第2页
c设计模式备忘录模式_第3页
c设计模式备忘录模式_第4页
c设计模式备忘录模式_第5页
资源描述:

《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());//创建负责人对象,保存创

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。