极速理解设计模式系列:19.备忘录模式(Memento Pattern)

简介:

四个角色:原发器(Originator)、备忘录(Memento)、看管者(Caretaker)、客户端(Client) 

        原发器(Originator):需要备忘录来记忆其内部状态的原型。可以将本类状态保存到备忘录,也可以通过备忘录恢复状态。

        备忘录(Memento):保持原发器的内部状态,

        看管者(Caretaker):看管备忘录,不可修改备忘录。

        客户端(Client) :执行原发器保存备忘录可恢复。

实现思路:客户端生产原发器,在原发器保存备忘录到看管者,原发器继续改变其状态,当需要时从看管者那里的备忘录获取已保存的状态以更新自身原发器状态。

类图:

 

应用场景:电话备忘保存。

分析:某人的电话保存到备忘录时,如果需要恢复,通过保管者调用备忘录到原发器类恢复即可。

        下面我们在控制台程序去演示一下如何使用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  下载。


本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/11/22/2246803.html,如需转载请自行联系原作者

相关文章
|
3月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
3月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
3月前
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
4月前
|
设计模式 算法
设计模式的基础问题之备忘录模式在软件开发的问题如何解决
设计模式的基础问题之备忘录模式在软件开发的问题如何解决
|
6月前
|
设计模式
备忘录模式-大话设计模式
备忘录模式-大话设计模式
|
5月前
|
设计模式 数据处理
iLogtail设计模式问题之什么是备忘录模式
iLogtail设计模式问题之什么是备忘录模式
|
6月前
|
设计模式
设计模式-05建造者模式(Builder Pattern)
设计模式-05建造者模式(Builder Pattern)
|
6月前
|
设计模式 存储 Java
Java设计模式之备忘录模式详解
Java设计模式之备忘录模式详解
|
7月前
|
设计模式 安全 Java
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
该文介绍了一种C++的编程技巧——奇异递归模板模式(CRTP),旨在让派生组件能继承基本组件的特定功能。通过示例展示了如何创建一个`Fighter`接口和`MmaFighter`类,其中`MmaFighter`及其子类如`MmaBantamweightFighter`和`MmaHeavyweightFighter`强制类型安全,确保相同重量级的拳手之间才能进行比赛。这种设计避免了不同重量级拳手间的错误匹配,编译时会报错。CRTP适用于处理类型冲突、参数化类方法和限制方法只对相同类型实例生效的情况。
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式