2023年设计模式学习笔记Memento备忘录模式.docx
《2023年设计模式学习笔记Memento备忘录模式.docx》由会员分享,可在线阅读,更多相关《2023年设计模式学习笔记Memento备忘录模式.docx(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、在软件的构建过程中,某些对象的状态在转换过程中,也许由于某种需要,规定程序可以回溯到对象之前某个点时的状态,假如使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。 如何实现对象状态的良好保存与恢复?但同时又不会因此而破坏对象自身的封装性。 Memento 备忘录模式提供解决途径,它在不破坏封装性的前提下,捕获一个对象的内部状态,并在这个对象之外保存这个状态。这样就可以将对象恢复到原先保存的状态。设计模式 GOF Memento备忘录模式UML图如下:重要角色:1、原发器角色Originator:它是我们关注的对象,我们需要保存和回溯的状态就是它的状态。我们需要在它内部创建备忘
2、录对象并运用备忘录对象保存我们需要保存的状态值,同时它还需要提供一种手段来恢复我们以前保存的状态值.2、备忘录对象Memento:它用于在不破坏封装性的前提下,捕获一个Originator的内部状态,并在备忘录对象Memento中保存这个状态。(Caretaker:用于防止原发器以外的对象访问备忘录对象,保证备忘录对象的安全性)。 下面我们用代码来示例,程序如下:一、备忘录模式思绪示例 1、原发器角色OriginatorusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceM
3、yMementoPattern/Memento模式合用于由原发器管理,却又必须存储在原发器之外的信息/定义原发器对象:Originator/有必要对自身内部状态进行保存,然后在某个点处又需要恢复内部状态的对象classOriginator#regionState属性privatestring_state;publicstringStategetreturn_state;set_state=value;Console.WriteLine(State=0,_state);#endregion/在实现Memento模式中,要防止原发器Originator以外的对象访问备忘录对象,备忘录对象有两个接口
4、,一个为原发器使用的宽接口,一个为其他对象使用的窄接口#region创建Memento类的方法(Memento类将用于保存Originator对象的State状态值)publicMementoCreateMemento()Console.WriteLine(创建Memento对象并保存状态到此对象中.);return(newMemento(_state);/此处,在创建Memento对象时就保存了对象状态#endregion#region运用上面Memento对象保存的状态值进行状态恢复操作publicvoidSetMemento(Mementomemnto)Console.WriteLine
5、(恢复对象状态.);State=memnto.State;#endregion 2、备忘录对象MementousingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceMyMementoPatternclassMemento/定义备忘录对象Memento类,它专门用于保存Originator类对象的状态信息/也即:在不破坏封装性的前提下,捕获一个Originator的内部状态,并在这个对象之外保存这个状态。/而这个状态值就保存在Memento类中privatestring_stat
6、e;publicstringStategetreturn_state;#region构造函数publicMemento(stringstate)this._state=state;#endregion 3、CaretakerusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceMyMementoPattern/定义CareTaker类/此类的作用是保证Mmento类的安全性classCareTakerprivateMemento_memento;publicMementoMe
7、mentogetreturn_memento;set_memento=value; 4、客户端应用#region基本思绪示例Console.WriteLine(-备忘录模式基本思绪示例-);Originatoro=newOriginator();o.State=On;/设立Originator类对象状态CareTakerc=newCareTaker();c.Memento=o.CreateMemento();Console.WriteLine(设立状态新值.);o.State=Off;o.SetMemento(c.Memento);Console.ReadKey();#endregion二、在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 设计 模式 学习 笔记 Memento 备忘录
限制150内