备忘录模式(Memento Pattern)

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

类图:

        我们在编程的时候,经常需要保存对象的中间状态,当需要的时候,可以恢复到这个状态。例如word和vs中的撤消操作

备忘录模式的结构

  • 发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。
  • 备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。
  • 管理角色:对备忘录进行管理,保存和提供备忘录。

代码:

     public class Originator
     {
        private string state;
        public string State
        {
            get { return state; }
            set { state = value; }
        }
        public Memento CreateMemento()
        {
            return (new Memento(state));
        }
        public void SetMemento(Memento memento)
        {
            state = memento.State;
        }
        public void Show()
        {
            Console.WriteLine("State=" + state);
        }
    }
    
    public class Memento
    {
        private string state;

        public string State
        {
            get { return state; }
        }

        public Memento(string state)
        {
            this.state = state;
        }
      
    }
    public class Caretaker
    {
        private Memento memento;

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

调用:

            Originator o = new Originator();
            o.State = "On";
            o.Show();

            Caretaker caretaker = new Caretaker();
            caretaker.Memento = o.CreateMemento();

            o.State = "Off";
            o.Show();

            o.SetMemento(caretaker.Memento);
            o.Show();

效果:

posted @ 2013-11-06 11:41  nygfcn  阅读(177)  评论(0编辑  收藏  举报