c#设计模式及-行为性模式-10.备忘录模式
Posted mr.chenyuelin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#设计模式及-行为性模式-10.备忘录模式相关的知识,希望对你有一定的参考价值。
备忘录模式:在不破坏封装的前提下,捕获一个对象的内部状态,并在对象之外保存该状态。等需要的时候可以将对象恢复到原先保存的状态
例子,我在看手机联系人列表,突然不小心把某个联系人删掉了,就可以用备忘录恢复联系人列表
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 备忘录模式
{
//联系人,数据
public sealed class ContactPerson
{
public string Name { get; set; }
public string phoneNumber { get; set; }
public ContactPerson(string name,string phone)
{
Name = name;
phoneNumber = phone;
}
}
//发起人
public sealed class PhoneBackOrignator
{
private List<ContactPerson> personList;
//联系人列表
public List<ContactPerson> ContactPersonList
{
get { return personList; }
set { personList = value; }
}
public PhoneBackOrignator(List<ContactPerson> list)
{
ContactPersonList = list;
}
//创建备忘录实例,保存联系人到备忘录中
public ContactPersonMemento CreateMemento()
{
return new ContactPersonMemento(new List<ContactPerson>(this.personList));
}
//将备忘录数据还原到联系人列表中
public void RestoreeMemento(ContactPersonMemento memento)
{
this.ContactPersonList = memento.ContactPersonListBack;
}
public void Show()
{
Console.WriteLine($"联系人列表中有{ContactPersonList.Count}个人,分别是:");
foreach (ContactPerson p in ContactPersonList)
{
Console.WriteLine($"姓名:{p.Name} 号码:{p.phoneNumber}");
}
}
}
//备忘录对象
public sealed class ContactPersonMemento
{
//保存发起人的电话名单数据,就是所谓的状态
public List<ContactPerson> ContactPersonListBack { get; private set; }
public ContactPersonMemento(List<ContactPerson> peopleList)
{
ContactPersonListBack = peopleList;
}
}
//管理角色
public sealed class MementoManager
{
//单个备忘录
public ContactPersonMemento contactPersonMemento { get; set; }
//多个备忘录,可使用字典或栈保存,栈可以反应对象的先后顺序
//public Dictionary<string,ContactPersonMemento> dic { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<ContactPerson> persons = new List<ContactPerson>()
{
new ContactPerson("陈红","18050113021"),
new ContactPerson("李宁","14545457485"),
new ContactPerson("张小雨","16035021549")
};
//手机订单发起人,初始化联系人列表
PhoneBackOrignator backOrignator = new PhoneBackOrignator(persons);
backOrignator.Show();
//创建备忘录
MementoManager mementoManager = new MementoManager();
mementoManager.contactPersonMemento = backOrignator.CreateMemento();
//更改联系人列表
Console.WriteLine("移除最后一个联系人:");
backOrignator.ContactPersonList.RemoveAt(2);
backOrignator.Show();
//恢复联系人列表
Console.WriteLine("恢复联系人列表:");
backOrignator.RestoreeMemento(mementoManager.contactPersonMemento);
backOrignator.Show();
Console.ReadKey();
}
}
}
联系人列表中有3个人,分别是:
姓名:陈红 号码:18050113021
姓名:李宁 号码:14545457485
姓名:张小雨 号码:16035021549
移除最后一个联系人:
联系人列表中有2个人,分别是:
姓名:陈红 号码:18050113021
姓名:李宁 号码:14545457485
恢复联系人列表:
联系人列表中有3个人,分别是:
姓名:陈红 号码:18050113021
姓名:李宁 号码:14545457485
姓名:张小雨 号码:16035021549
以上是关于c#设计模式及-行为性模式-10.备忘录模式的主要内容,如果未能解决你的问题,请参考以下文章