zoukankan      html  css  js  c++  java
  • 极速理解设计模式系列: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  下载。

  • 相关阅读:
    C#逻辑运算符
    C#:采用TuesPechkin生成Pdf
    C# 发布时出现:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
    C# winform在窗体中动态添加按钮
    C# winform滚动字幕效果
    C# Winform操作注册表实现窗体的定位记忆功能
    C#提取类型的所有方法和参数
    .NET FCL(框架类库)名称空间说明
    .NET框架通用语言运行时(CLR)的执行模型
    坚持学习,高效率才能更有水平
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2246803.html
Copyright © 2011-2022 走看看