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

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();
        }

⑤ 结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值