一.动机(Motivate) 我们看上图,一个对象肯定会有很多状态,这些状态肯定会相互转变而促进对象的发展,如果要想在某一时刻把当前对象回复到以前某一时刻的状态,这个情况用"备忘录模式"就能很好解决该问题. 在软件构建过程中,某些对象的状态在转换的过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态.如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现. 如何实现对象状态的良好保存与恢复,但同时又不会因此而破坏对象本身的封装性? 二.意图(Inten…
1.讲解备忘录模式 备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式. 1.1定义 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 1.2涉及角色 1.Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态.Originator可以根据需要决定Memen…
结构 意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 适用性 必须保存一个对象在某一个时刻的(部分)状态, 这样以后需要时它才能恢复到先前的状态. 如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象 using System; class Originator { ; ; ; public void MakeSale(double purchasePrice) { // We assume s…
一:概念 用于保存对象的内部状态,并在需要的时候(undo/rollback)回复对象以前的状态 二:应用场景 如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以使用Memento模式. )一个类需要保存它的对象的状态(相当于Originator角色): )设计一个类,该类只是用来保存上述对象的状态(相当于Memento角色): )需要的时候,Caretaker角色要求Originator返回一个Memento并加以保存: )undo或rollback操作时…
一.概述 概念 UML简图 角色 根据下图得到角色 备忘录角色(Memento).发起人角色(Originator).负责人角色(Caretaker) 二.实践 使用白箱实现,给出角色的代码: 发起人 /** * 发起者 * * @author Administrator **/ public class Originator { /** * 发起者想要保存的状态 */ private String state; public String getState() { return state;…
[状态模式] No1: Wifi设置界面是一个叫做WifiSetting的Fragment实现的 No2: 在不同的状态下对于扫描Wifi这个请求的处理是完全不一样的.在初始状态下扫描请求被直接忽略,在驱动加载中状态下Wifi扫描请求被添加到延迟处理的消息列表,在驱动加载完成状态下扫描Wifi的请求直接被处理. 它的实现原理就是将请求的处理封装到状态类中,在不同的状态类中对同一个请求进行不同的处理 [责任链模式] No3: 最大缺点:对链中请求处理者的遍历,如果处理者太多,那么遍历必定会影响性能…
中介者 中介者模式:使用中介者来集中相关对象之间复杂的沟通方式和控制方式. Bob有一个自动屋,当他的闹钟响了只有,闹钟会告诉咖啡壶开始煮咖啡.后来客户不断的提出许多新需求:周末不要提供咖啡.下班后需要扫地机器人扫地等.这个时候咖啡壶需要接受闹钟并检查日期,而日历需要接受闹钟的询问并告诉闹钟是否周末,扫地机器人需要接受闹钟并检查是否下班时间等等一系列操作. 想要持续地追踪每个对象的每个规则,以及众多对象之间彼此错综复杂的关系对于设计来说不满足单一职责,同时可能会相互引用造成系统复杂.这个时候就可…
定义: 在不破坏原有封装的情况下,捕获一个对象的内部状态,并在对象之外保存.当对象出错或者无效是,可以根据该备忘录进行恢复. 结构图: Originator:原发类,被记录的对象,包含若干内部状态.一般定义了一个createMemento()方法用于生产一个备忘录,记录当前的状态. Memento:备忘录类,类的结构和原发类相似,选择性地选取原发类的属性作为自己的属性,用于存储原发类的状态.该类有严格的访问控制,除了原发类和负责人类可以访问,备忘录不能提供给其它类使用. Caretaker:负责…
一.概述         在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象的外部保存这个状态.以便以后可以将该对象恢复到原先保存的状态. 二.适用性 1.当需要保存一个对象在某个时刻的状态(部分)的时候,以便需要时可以恢复到先前保存的状态.2.当不愿意暴露对象的实现细节和破坏对象的封装性,又需要让其他对象得到该对象的状态的时候.    三.参与者 1.Memento:备忘录.用于存储原发器对象的内部状态. 2.Originator:原发器.为原发器创建一个备忘录,用于记录当前时刻它的内…
其目的是,在不违反封装原则的前提下.採集和备份一个对象的内部状态以便这个对象能够在以后恢复到之前的某个状态. 在Memento模式中,有例如以下角色: 1.Memento (备忘录) * 存储Originator的内部状态. 依据Originator的须要.能够存储随意的内部状态. * 保护对状态的訪问.除了Originator对象外,其它对象不能訪问其存储的内部状态.Memeoto实际上提供了2个接口. Caretaker仅仅能訪问Memento的窄接口(narrow interface) -…