设计模式-备忘录模式

2023-06-26,,

class Memento
    {
        private int age;
        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                this.age = value;
            }
        }
        public Memento(int _age)
        {
            age = _age;
        }
    }

    class Person
    {
        private string name;
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                this.name = value;
            }
        }
        private int age;
        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                this.age = value;
            }
        }
        public Memento SaveToMemento()
        {
            return new Memento(age);
        }

        public void ReadMemento(Memento m)
        {
            this.age = m.Age;
        }
        public void Show()
        {
            Console.WriteLine("我叫{0},今年{1}岁", name, age);
        }
    }

    class MementoController
    {
        private Memento memento;
        public Memento Memento
        {
            get
            {
                return memento;
            }
            set
            {
                this.memento = value;
            }
        }

    }

        //前端
        class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();
            MementoController mc = new MementoController();//备忘录管理者,不允许客户直接访问备忘录
            person.Name = "张三";
            person.Age = 15;
            person.Show();            
            Console.WriteLine("把15岁存起来,以后老了在回来");
            mc.Memento= person.SaveToMemento();

            Console.WriteLine("20年过去了.....");
            Console.WriteLine("30年过去了.....");
            Console.WriteLine("40年过去了.....");
            Console.WriteLine("50年过去了.....");
            person.Age = person.Age+50;
            person.Show();
            Console.WriteLine("好想回到小时候.....那就回去把");
            person.ReadMemento(mc.Memento);
            person.Show();
            Console.ReadLine();
        }
    }

总结:备忘录模式就是把对象的部分属性做备份(在对象之外),然后在想恢复的时候恢复。
原型模式的clone也可以备份数据,之所以还有备忘录模式,是因为clone是克隆的整个对象,而备忘录模式可以人为控制的只备份关键属性。如果扩展,不要改当前备忘录,添加新的类作为新的备忘录就好。
优点:随时还原
缺点:数据太大的话影响性能。

《设计模式-备忘录模式.doc》

下载本文的Word格式文档,以方便收藏与打印。