Memento备忘录模式属于行为型设计模式,该模式在不违反封装性的情况下,捕获并保存对象的内部状态,以便稍后可以将对象恢复到该状态。
Design Pattern:Memento 🔗
基本介绍 🔗
构成 🔗
- Originator:发起者类,需要保存和恢复状态的对象。负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。
- Memento:备忘录类,负责存储发起人对象的内部状态,在进行恢复时提供给发起人需要的状态,并可以防止Originator以外的其他对象访问备忘录。
- Caretaker:管理者类,负责保存备忘录对象。
优点 🔗
- 提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的状态。
缺点 🔗
- 可能需要维护多个备份,会带来很多额外的资源消耗。
- 当Originator的状态改变的时候,这个备份将会失效。
实例 🔗
C#中备忘录模式的实例,随着工作室的员工越来越多,我决定备份一下女员工的联系方式。
/// <summary>
/// 员工联系方式
/// </summary>
public class EmployeeContact
{
public string Name;
public string Number;
}
/// <summary>
/// 发起者 - 老板
/// </summary>
public class BossOriginator
{
private List<EmployeeContact> _employeeContacts = new List<EmployeeContact>();
public EmployeeContactMemento CreateMemento()
{
EmployeeContactMemento mementoCaretaker = new EmployeeContactMemento(_employeeContacts);
return mementoCaretaker;
}
public void ResetMemento(EmployeeContactMemento mementoCaretaker)
{
_employeeContacts = mementoCaretaker.EmployeeContacts;
}
}
/// <summary>
/// 备忘录
/// </summary>
public class EmployeeContactMemento
{
public List<EmployeeContact> EmployeeContacts
{
private set;
get;
}
public EmployeeContactMemento(List<EmployeeContact> contacts)
{
EmployeeContacts = contacts;
}
}
/// <summary>
/// 管理者
/// </summary>
public class MementoCaretaker
{
public EmployeeContactMemento EmployeeContact;
}
实际运行:
BossOriginator bossOriginator = new BossOriginator();
MementoCaretaker caretaker = new MementoCaretaker();
caretaker.EmployeeContact = bossOriginator.CreateMemento();
bossOriginator.ResetMemento(caretaker.EmployeeContact);
结论 🔗
搬砖愉快!