C# 设计模式 行为型模式 之 备忘录模式

备忘录模式 保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。

现实实例:打游戏时的存档。

优点: 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 

下面通过 示例 来演示 备忘录模式:

namespace 备忘录模式
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Originator originator = new Originator();
            CareTaker careTaker = new CareTaker();
            originator.SetState("State #1");
            originator.SetState("State #2");
            careTaker.Add(originator.SavaState());
            originator.SetState("State #3");
            originator.SetState("State #4");
            careTaker.Add(originator.SavaState());
            originator.SetState("State #5");
            originator.GetSavaState(careTaker.Get(0));
            Console.WriteLine(originator.GetState());
            originator.GetSavaState(careTaker.Get(1));
            Console.WriteLine(originator.GetState());
            /*
             * 控制台输出
             *  State #2
                 State #4
             */
        }
    }
    //备忘录类
    public class Memento
    {
        private string state;
        public Memento(string state)
        {
            this.state = state;
        }
        public string GetState()
        {
            return state;
        }
    }
    //扩展 强化 备忘录
    public class Originator
    {
        private string state;
        public void SetState(string state)
        {
            this.state = state;
        }
        public string GetState()
        {
            return this.state;
        }
        public Memento SavaState()
        {
            return new Memento(this.state);
        }
        public void GetSavaState(Memento memento)
        {
            state =memento.GetState();
        }
    }
    //添加 保存,获得保存
    public class CareTaker
    {
        public List<Memento> mementos = new List<Memento>();
        public void Add(Memento memento)
        {
            mementos.Add(memento);
        }
        public Memento Get(int index)
        {
            return mementos[index];
        }
    }
}

缺点:消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。

猜你喜欢

转载自blog.csdn.net/q8812345qaz/article/details/127604925