陈巧倩

设计模式-备忘录模式

· 133 words · 1 minutes to read
Categories: CSharp
Tags: Design Pattern

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);

结论 🔗

搬砖愉快!