Memento_备忘录模式 《大话设计模式》

  • Post author:
  • Post category:其他




Memento_备忘录模式


1.概念



备忘录

(Memento)模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样在这个对象发生改变后,就可以使用

备忘录

将该对象恢复到原先保存的状态。


2.UML类图


请添加图片描述


3.代码分析





发起者类

Originator

,产生一个状态。

    class Originator 
    {
    	//状态
        private string state;
        public string State
        { 
            get { return state; }
            set { state = value; }
        }

        /// <summary>
        /// 创建备忘录
        /// </summary>
        /// <returns></returns>
        public Memento CreateMemento()
        { 
            return (new Memento(state));
        }

        /// <summary>
        /// 恢复状态
        /// </summary>
        /// <param name="memento"></param>
        public void SetMemento(Memento memento) 
        {
            state = memento.State;  
        }

        /// <summary>
        /// 展示状态
        /// </summary>
        public void Show()
        { 
            Console.WriteLine("状态State为:" + state);
        }
    }    




备忘录类

Memento

,存储一个状态。

    class Memento 
    {
        //状态
        private string state;
        public string State
        {
            get { return state; }
        }

        /// <summary>
        /// 保存状态
        /// </summary>
        /// <param name="state"></param>
        public Memento(string state)
        { 
            this.state = state;
        }
    }




管理者类

Caretaker

,使用备忘录对象保存当前状态。

    class Caretaker 
    {
        /// <summary>
        /// 备忘录对象
        /// </summary>
        private Memento memento;
        public Memento Memento
        {
            get { return memento; }
            set { memento = value; }
        }   
    }


④ Main函数

,最初状态 => 保存状态 => 改变状态 => 恢复最初状态。

        static void Main(string[] args)
        {
            //设置初始状态
            Originator origin = new Originator();
            origin.State = "OK";
            origin.Show();

            //管理者保存备忘录
            Caretaker caretaker = new Caretaker();
            caretaker.Memento = origin.CreateMemento();

            Console.WriteLine("\n====改变状态====\n");

            //改变状态
            origin.State = "NG";
            origin.Show();

            Console.WriteLine("\n====恢复状态====\n");

            //恢复状态
            origin.SetMemento(caretaker.Memento);
            origin.Show();

            Console.ReadKey();
        }


⑤ 结果


在这里插入图片描述



版权声明:本文为weixin_49738070原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。