极速理解设计模式系列:19.备忘录模式(Memento Pattern)
2011-11-22 14:15
866 查看
四个角色:原发器(Originator)、备忘录(Memento)、看管者(Caretaker)、客户端(Client)
原发器(Originator):需要备忘录来记忆其内部状态的原型。可以将本类状态保存到备忘录,也可以通过备忘录恢复状态。
备忘录(Memento):保持原发器的内部状态,
看管者(Caretaker):看管备忘录,不可修改备忘录。
客户端(Client) :执行原发器保存备忘录可恢复。
实现思路:客户端生产原发器,在原发器保存备忘录到看管者,原发器继续改变其状态,当需要时从看管者那里的备忘录获取已保存的状态以更新自身原发器状态。
[b]类图:[/b]
![](http://pic002.cnblogs.com/images/2011/140041/2011111222210135.gif)
应用场景:电话备忘保存。
分析:某人的电话保存到备忘录时,如果需要恢复,通过保管者调用备忘录到原发器类恢复即可。
下面我们在控制台程序去演示一下如何使用Memento Pattern:
一、原发器(Originator):
二、备忘录(Memento):
三、看管者(Caretaker):
四、 客户端(Client) :
如需源码请点击 MementoPattern.rar 下载。
原发器(Originator):需要备忘录来记忆其内部状态的原型。可以将本类状态保存到备忘录,也可以通过备忘录恢复状态。
备忘录(Memento):保持原发器的内部状态,
看管者(Caretaker):看管备忘录,不可修改备忘录。
客户端(Client) :执行原发器保存备忘录可恢复。
实现思路:客户端生产原发器,在原发器保存备忘录到看管者,原发器继续改变其状态,当需要时从看管者那里的备忘录获取已保存的状态以更新自身原发器状态。
[b]类图:[/b]
![](http://pic002.cnblogs.com/images/2011/140041/2011111222210135.gif)
应用场景:电话备忘保存。
分析:某人的电话保存到备忘录时,如果需要恢复,通过保管者调用备忘录到原发器类恢复即可。
下面我们在控制台程序去演示一下如何使用Memento Pattern:
一、原发器(Originator):
//Originator 原发器 class PhoneOriginator { public string Name { get; set; } public string Number { get; set; } public PhoneMemento SaveMemento() { return new PhoneMemento(Name, Number); } public void ResumeMemento(PhoneMemento phoneMemento) { this.Name = phoneMemento.Name; this.Number = phoneMemento.Number; } public void Display() { Console.WriteLine("------------------"); Console.WriteLine(Name); Console.WriteLine(Number); } }
二、备忘录(Memento):
//Memento 备忘录 class PhoneMemento { public string Name { get; set; } public string Number { get; set; } public PhoneMemento(string name, string number) { this.Name = name; this.Number = number; } }
三、看管者(Caretaker):
//Caretaker 看管者 class PhoneCaretaker { public PhoneMemento Memento { set; get; } }
四、 客户端(Client) :
//Client 客户端 class Program { static void Main(string[] args) { PhoneOriginator po = new PhoneOriginator(); po.Name = "张三"; po.Number = "13880191995"; po.Display(); PhoneCaretaker pcaretaker = new PhoneCaretaker(); pcaretaker.Memento = po.SaveMemento(); po.Name = "李丽"; po.Number = "13669595999"; po.Display(); po.ResumeMemento(pcaretaker.Memento); po.Display(); Console.ReadLine(); } }
如需源码请点击 MementoPattern.rar 下载。
相关文章推荐
- 极速理解设计模式系列:19.备忘录模式(Memento Pattern) 推荐
- 极速理解设计模式系列:5.组合模式(Composite Pattern)
- 极速理解设计模式系列:6.适配器模式(Adapter Pattern)
- 极速理解设计模式系列:13.外观模式(Facade Pattern)
- 极速理解设计模式系列:4.原型模式(Prototype Pattern)
- 极速理解设计模式系列:1.建造者模式(Builder Pattern)
- 设计模式系列4-----C++实现备忘录模式(Memento Pattern)
- 极速理解设计模式系列:4.原型模式(Prototype Pattern)
- 极速理解设计模式系列:1.建造者模式(Builder Pattern)
- 极速理解设计模式系列【目录索引】
- 极速理解设计模式系列:11.单例模式(Singleton Pattern)
- 极速理解设计模式系列【目录索引】
- 极速理解设计模式系列:3.简单工厂模式(Simple Factory Pattern)
- 极速理解设计模式系列:11.单例模式(Singleton Pattern)
- 极速理解设计模式系列:14.轻量级模式(Flyweight Pattern)
- 我所理解的设计模式(C++实现)——备忘录模式(Memento Pattern)
- 极速理解设计模式系列:21.简单工厂模式(Simple Factory Pattern)
- 极速理解设计模式系列:8.策略模式(Strategy Pattern)
- 极速理解设计模式系列:2.观察者模式(Observer Pattern)
- 极速理解设计模式系列:14.轻量级模式(Flyweight Pattern)