`

MementoPattern

 
阅读更多

意图
在不破坏封装性的前提下,捕获一个对象内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.

 

适用性
必须保存一个对象在某一个时刻的(部分)状态,这样以后需要时它才能恢复到先前的状态.

 

构成:
1.备忘录(Memento)角色:保持原发器(Originator)的内部状态,根据原发器来决定保存哪些内部的状态.(备忘录角色就好比是一个日记本把当前发生的一些事情记录下来,当过段时间回过头来再看日记本的时候就知道在那个时刻发生了什么事情)

备忘录可以有效地利用两个接口.看管者只能调用狭窄(功能有限)的接口---它只能传递备忘录给其他对象.而原发器可以调用一个宽阔(功能强大)的接口,通过这个接口可以访问所有需要的数据,使原发器可以返回先前的状态.

 

2.原发器(Originator)角色:创建一个备忘录,记录它当前内部状态.可以利用一个备忘录来回复它的内部状态.

 

3.看管者(Caretaker)角色:只负责看管备忘录.不可以对备忘录的内容操作或检查.

 

ClassDiagram:

 

SequenceDiagram:

 

 //公司销售记录示例
    class Client
    {
        static void Main(string[] args)
        {
            Originator ori = new Originator("张三", "123456", 1000);

            ori.Show();

            Caretaker caretaker = new Caretaker();

            //保存备忘录
            caretaker.Memento = ori.SaveMemento();

            ori = new Originator("李四", "654321", 2000);

            ori.Show();

            //恢复备忘录
            ori.RestoreMemento(caretaker.Memento);

            ori.Show();

            Console.ReadKey();
        }
    }

    /// <summary>
    /// 备忘录角色
    /// </summary>
    class Memento
    {
        private string name;
        private string phone;
        private double budget;

        public Memento(string name, string phone, double budget)
        {
            this.name = name;
            this.phone = phone;
            this.budget = budget;
        }

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public string Phone
        {
            get { return phone; }
            set { phone = value; }
        }

        public double Budget
        {
            get { return budget; }
            set { budget = value; }
        }
    }

    /// <summary>
    /// 原发器角色
    /// </summary>
    class Originator
    {
        private string name;
        private string phone;
        private double budget;

        public Originator(string name, string phone, double budget)
        {
            this.name = name;
            this.phone = phone;
            this.budget = budget;
        }

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public string Phone
        {
            get { return phone; }
            set { phone = value; }
        }

        public double Budget
        {
            get { return budget; }
            set { budget = value; }
        }

        //保存备忘录
        public Memento SaveMemento()
        {
            return new Memento(name, phone, budget);
        }
        //恢复备忘录
        public void RestoreMemento(Memento memento)
        {
            name = memento.Name;
            phone = memento.Phone;
            budget = memento.Budget;
        }

        public void Show()
        {
            Console.WriteLine("销售期望");
            Console.WriteLine("姓名: {0}", name);
            Console.WriteLine("电话: {0}", phone);
            Console.WriteLine("预算: {0}", budget);
        }
    }

    /// <summary>
    /// 看管者
    /// </summary>
    class Caretaker
    {
        private Memento memento;

        internal Memento Memento
        {
            get { return memento; }
            set { memento = value; }
        }
    }

 

 

  • 大小: 43.7 KB
  • 大小: 85 KB
分享到:
评论

相关推荐

    设计模式之备忘录模式(Memento Pattern)

    文件"MementoPattern"可能包含了关于备忘录模式的示例代码、解释文档或者相关测试用例,可以帮助进一步理解和应用这个模式。通过阅读和分析这个文件,可以更深入地学习备忘录模式在不同场景下的使用方法和注意事项。

    C#备忘录模式(Memento Pattern)实例教程

    本文以一个简单实例讲述了C#备忘录模式(Memento Pattern)的实现方法。分享给大家供大家参考。具体实现方法如下: 简单来说,备忘录模式就是支持回退操作。假设让一个Notepad支持回退操作,如何实现呢? 首先需要一个...

    深入浅出设计模式——备忘录模式(MementoPattern)

    【备忘录模式(Memento Pattern)】是一种设计模式,主要目的是为了在不破坏对象封装性的前提下,能够保存和恢复对象的内部状态。这种模式常用于实现撤销/重做功能,例如在文本编辑器、游戏或数据库管理系统中。通过...

    [行为型模式] 备忘录模式的理解

    在这个例子中,MementoPattern.h 和 MementoPattern.cpp 文件可能包含了备忘录类的定义和实现。 3. 照顾者(Caretaker):负责保存和提供备忘录,但不允许对备忘录的内容进行操作。这确保了原始对象的封装性不被破坏...

    C#版 24种设计模式

    备忘录模式(Memento Pattern) 策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) 单例模式(Singleton Pattern) 迭代器模式(Iterator Pattern) 访问者模式(Visitor ...

    C#设计模式_设计模式_C#_

    创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3.... 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    设计模式之备忘录模式(Memento)

    备忘录模式(Memento Pattern)是设计模式中的一种行为模式,主要目的是在不违反封装原则的情况下,保存一个对象的内部状态,以便在需要时能够恢复到先前的状态。这种模式通常用于实现撤销/重做功能或者在游戏中保存...

    23种设计模式 (创建型,结构型,行为型)

    创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) ... 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) ...20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    用Java实现23种设计模式

    备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式...

    设计模式PPT

     备忘录模式(Memento Pattern)  观察者模式(Observer Pattern)  状态模式(State Pattern)  策略模式(Strategy Pattern)  模板方法模式(Template Method Pattern)  访问者模式(Visitor ...

    32种设计模式

    C# 32种设计模式: 创建型: 1. 单件模式(Singleton ... 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    33种JAVA设计模式DEMO

    备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor ...

    13-Memento.rar

    备忘录设计模式(Memento Pattern)是软件工程中的一种行为设计模式,主要用于在不破坏封装性的前提下,捕捉对象的内部状态,并允许之后恢复到该状态。这种模式在许多场景下都有广泛应用,比如撤销/重做功能、游戏...

    备忘录模式(Memento) 注册时用的

    备忘录模式(Memento Pattern)是一种设计模式,它允许对象在不破坏封装性的前提下,捕获并存储其内部状态,以便在需要时恢复到先前的状态。这种模式常用于撤销/重做功能,或者在注册过程中保存用户信息,防止因意外...

    iOS 设计模式 备忘录模式

    在iOS开发中,设计模式是一种解决常见编程问题的模板,可以提高代码的可读性、可维护性和可重用性。...在MementoPattern-master项目中,开发者可以深入学习和理解备忘录模式的具体实现和应用场景。

    C++设计模式课件19_Memento_备忘录.pdf

    备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。在C++中实现备忘录模式通常涉及以下几个角色: 1. 发起人(Originator):创建一个备忘录,用以...

    C#23种设计模式

    │ └─MementoPattern │ ├─bin │ │ └─Debug │ ├─obj │ │ └─Debug │ │ └─TempPE │ └─Properties ├─19.MediatorPattern │ ├─html │ └─MediatorPattern │ ├─bin │ │ └─Debug │ ...

Global site tag (gtag.js) - Google Analytics