备忘录模式(Memento Pattern),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以就该对象恢复到原先保存的状态。 当系统功能比较复杂,而且需要记录历史属性以便当需要时做恢复动作。Originator可以根据保存的Memento信息还原到前一状态。   
![]()
using System;
namespace DoFactory.GangOfFour.Memento.Structural
{
    /// <summary>
    /// MainApp startup class for Structural
    /// Memento Design Pattern.
    /// </summary>
    class MainApp
    {
        /// <summary>
        /// Entry point into console application.
        /// </summary>
        static void Main()
        {
            Originator o = new Originator();
            o.State = "On";
            Caretaker c = new Caretaker();
            c.Memento = o.CreateMemento();
            o.State = "Off";
            o.SetMemento(c.Memento);
          
            Console.ReadKey();
        }
    }
    //1、发起人类Originator
    
    class Originator
    {
        private string _state;
    
        public string State
        {
            get { return _state; }
            set
            {
                _state = value;
                Console.WriteLine("State = " + _state);
            }
        }
        // 创建 memento
        public Memento CreateMemento()
        {
            return (new Memento(_state));
        }
        //恢复原来的状态
        public void SetMemento(Memento memento)
        {
            Console.WriteLine("Restoring state...");
            State = memento.State;
        }
    }
  
    //2、备忘录类Memento
    
    class Memento
    {
        private string _state;
    
        public Memento(string state)
        {
            this._state = state;
        }
        // 获取或设置状态
        public string State
        {
            get { return _state; }
        }
    }
   
    //3、管理者类Caretaker
    class Caretaker
    {
        private Memento _memento;
        //获取或设置memento
        public Memento Memento
        {
            set { _memento = value; }
            get { return _memento; }
        }
    }
}