Skip to content

备忘录(Memento)模式 行为型模式

更新: 2023-05-24 11:11:27   字数: 0 字   时长: 0 分钟

在不破坏封装性的前提下,获取并保存一个对象的内部状态,以便以后恢复它。

c#
// 备忘录模式示例
using System;

// 备忘录类,用于存储需要备份的数据
class Memento
{
    private string _state;

    public Memento(string state)
    {
        this._state = state;
    }

    public string GetState()
    {
        return this._state;
    }
}

// 原始对象类,用于创建备忘录和恢复备忘录
class Originator
{
    private string _state;

    public void SetState(string state)
    {
        Console.WriteLine("设置状态为:" + state);
        this._state = state;
    }

    public Memento SaveStateToMemento()
    {
        Console.WriteLine("保存状态到备忘录");
        return new Memento(this._state);
    }

    public void GetStateFromMemento(Memento memento)
    {
        Console.WriteLine("从备忘录中恢复状态");
        this._state = memento.GetState();
    }
}

// 备忘录管理类,用于管理备忘录
class CareTaker
{
    private Memento _memento;

    public void SetMemento(Memento memento)
    {
        Console.WriteLine("保存备忘录");
        this._memento = memento;
    }

    public Memento GetMemento()
    {
        Console.WriteLine("获取备忘录");
        return this._memento;
    }
}

// 客户端类,用于测试备忘录模式
class Client
{
    static void Main(string[] args)
    {
        // 创建原始对象
        Originator originator = new Originator();

        // 创建备忘录管理对象
        CareTaker careTaker = new CareTaker();

        // 设置原始对象状态并保存到备忘录
        originator.SetState("状态1");
        careTaker.SetMemento(originator.SaveStateToMemento());

        // 设置原始对象状态并保存到备忘录
        originator.SetState("状态2");
        careTaker.SetMemento(originator.SaveStateToMemento());

        // 从备忘录中恢复原始对象状态
        originator.GetStateFromMemento(careTaker.GetMemento());

        Console.ReadKey();
    }
}
你觉得这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度