c#设计模式之备忘录模式

来源:互联网 发布:淘宝店铺分析插件 编辑:程序博客网 时间:2024/06/07 02:52
using System;using System.Collections.Generic;namespace Program{    //联系人    public class ContactPerson    {        public string Name { get; set; }        public string MobileNum { get; set; }    }    //备忘录    public class ContactMemento    {        //保存发起人的内部状态        public List<ContactPerson> contactPersonBack;        public ContactMemento(List<ContactPerson> persons)        {            contactPersonBack = persons;        }    }    //发起人    public class MobileOwner    {        //发起人需要保存的内部状态        public List<ContactPerson> ContactPersons { get; set; }        public MobileOwner(List<ContactPerson> persons)        {            ContactPersons = persons;        }        //创建备忘录,将要保存的联系人列表导入到备忘录中        public ContactMemento CreateMemento()        {            return new ContactMemento(new List<ContactPerson>(this.ContactPersons));        }        //将备忘录中的数据备份导入到联系人列表中        public void RestoreMemento(ContactMemento memento)        {            this.ContactPersons = memento.contactPersonBack;        }        public void show()        {            Console.WriteLine("{0}个人", ContactPersons.Count);            foreach (ContactPerson p in ContactPersons)            {                Console.WriteLine("name:{0} number:{1} ", p.Name, p.MobileNum);            }        }    }    //管理角色    public class Caretaker    {        public ContactMemento ContactM { get; set; }    }    class Program    {        static void Main(string[] args)        {            List<ContactPerson> persons = new List<ContactPerson>()            {                new ContactPerson(){Name="a",MobileNum="01234"},                new ContactPerson(){Name="b",MobileNum="56789"},                new ContactPerson(){Name="c",MobileNum="98765"},            };            MobileOwner mobileOwner = new MobileOwner(persons);            mobileOwner.show();            //创建备忘录并保存备忘录对象            Caretaker caretaker = new Caretaker();            caretaker.ContactM = mobileOwner.CreateMemento();            //移除最后一个联系人            mobileOwner.ContactPersons.RemoveAt(2);            mobileOwner.show();            //恢复到初始状态            mobileOwner.RestoreMemento(caretaker.ContactM);            mobileOwner.show();            Console.ReadKey();        }    }}


原创粉丝点击