zoukankan      html  css  js  c++  java
  • 23.备忘录模式(Memento Pattern)

    using System;
    using System.Collections.Generic;
    
    namespace ConsoleApplication6
    {
        /// <summary>
        /// 从字面意思就可以明白,备忘录模式就是对某个类的状态进行保存下来,
        /// 等到需要恢复的时候,
        /// 可以从备忘录中进行恢复。生活中这样的例子经常看到,
        /// 如备忘电话通讯录,备份操作操作系统,备份数据库等。
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                List<ContactPerson> persons = new List<ContactPerson>()
                {
                    new ContactPerson() { Name= "Learning Hard", MobileNum = "123445"},
                    new ContactPerson() { Name = "Tony", MobileNum = "234565"},
                    new ContactPerson() { Name = "Jock", MobileNum = "231455"}
                };
                MobileOwner mobileOwner = new MobileOwner(persons);
                mobileOwner.Show();
    
                // 创建备忘录并保存备忘录对象
                Caretaker caretaker = new Caretaker();
                caretaker.ContactM = mobileOwner.CreateMemento();
    
                // 更改发起人联系人列表
                Console.WriteLine("----移除最后一个联系人--------");
                mobileOwner.ContactPersons.RemoveAt(2);
                mobileOwner.Show();
    
                // 恢复到原始状态
                Console.WriteLine("-------恢复联系人列表------");
                mobileOwner.RestoreMemento(caretaker.ContactM);
                mobileOwner.Show();
    
                Console.Read();
            }
        }
    
        // 联系人
        public class ContactPerson
        {
            public string Name { get; set; }
            public string MobileNum { get; set; }
        }
    
    
        // 发起人
        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("姓名: {0} 号码为: {1}", p.Name, p.MobileNum);
                }
            }
        }
    
    
        // 备忘录
        public class ContactMemento
        {
            // 保存发起人的内部状态
            public List<ContactPerson> contactPersonBack;
    
            public ContactMemento(List<ContactPerson> persons)
            {
                contactPersonBack = persons;
            }
        }
    
        // 管理角色
        public class Caretaker
        {
            public ContactMemento ContactM { get; set; }
        }
     
    }
  • 相关阅读:
    关于Android线程间通信
    关于代码重构
    Android读书笔记01
    回忆 2012年写的
    我的笑 -- 2007年写的?
    伊人笑 2010年
    血色青春 2012年
    隔夜听雨
    错乱的爱 2010年
    【前端JS、后台C#】编码解码。
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/4729584.html
Copyright © 2011-2022 走看看