【设计模式】备忘录模式

目录

概述

优点

缺点

UML类图

示例代码


概述

        备忘录模式是一种行为型设计模式,它可以捕获一个对象的内部状态,并在该对象不改变其状态的前提下,将该状态保存起来,以便以后恢复到原先的状态。备忘录模式可以使得对象的状态恢复更加灵活、方便,同时又不破坏对象的封装性。

        备忘录模式通常包含三个角色:发起人、备忘录和负责人。发起人是需要保存状态的对象,它创建备忘录,并将自己的状态保存到备忘录中。备忘录是用于保存发起人的状态的对象,它可以被传递给负责人进行管理。负责人是用于管理备忘录的对象,它可以将备忘录存储起来或者恢复发起人的状态。

优点

        备忘录模式的优点在于它可以使得对象的状态恢复更加灵活、方便,同时又不破坏对象的封装性。此外,备忘录模式还可以提高系统的可维护性和可扩展性,因为它将状态保存和恢复的处理分离开来,从而使得状态的修改和扩展更加容易。

缺点

        备忘录模式的缺点在于它可能会导致代码的复杂度增加,因为它需要引入多个对象来实现状态的保存和恢复。此外,备忘录模式还可能会占用大量的内存空间,因为它需要保存多个备忘录对象来实现状态的多次恢复。

UML类图

        下面是备忘录模式的UML类图:

        在UML类图中,Originator是发起人,定义了一些操作来改变自己的状态,同时也定义了CreateMemento和RestoreMemento方法,用于创建备忘录和恢复状态。Memento是备忘录,用于保存发起人的状态。Caretaker是负责人,用于管理备忘录。客户端通过创建发起人和负责人对象,并通过发起人对象的操作改变了状态,并创建了备忘录。然后再次改变状态,并通过备忘录恢复了原先的状态。

 

示例代码

        下面是备忘录模式的示例代码:

// 发起人
public class Originator
{
    private string state;

    public string State
    {
        get { return state; }
        set
        {
            Console.WriteLine("Originator: Setting state to " + value);
            state = value;
        }
    }

    public Memento CreateMemento()
    {
        Console.WriteLine("Originator: Creating memento...");
        return new Memento(state);
    }

    public void RestoreMemento(Memento memento)
    {
        Console.WriteLine("Originator: Restoring memento...");
        state = memento.State;
    }
}

// 备忘录
public class Memento
{
    public string State { get; private set; }

    public Memento(string state)
    {
        State = state;
    }
}

// 负责人
public class Caretaker
{
    private Memento memento;

    public Memento Memento
    {
        get { return memento; }
        set
        {
            Console.WriteLine("Caretaker: Saving state to memento...");
            memento = value;
        }
    }
}

// 客户端
public class Client
{
    static void Main()
    {
        Originator originator = new Originator();
        Caretaker caretaker = new Caretaker();

        originator.State = "State1";
        Console.WriteLine("Current state: " + originator.State);

        caretaker.Memento = originator.CreateMemento();

        originator.State = "State2";
        Console.WriteLine("Current state: " + originator.State);

        originator.RestoreMemento(caretaker.Memento);
        Console.WriteLine("Current state: " + originator.State);
    }
}

        在上面的示例代码中,Originator是发起人,定义了一些操作来改变自己的状态,同时也定义了CreateMemento和RestoreMemento方法,用于创建备忘录和恢复状态。Memento是备忘录,用于保存发起人的状态。Caretaker是负责人,用于管理备忘录。在客户端中,首先创建了发起人和负责人对象,然后通过发起人对象的操作改变了状态,并创建了备忘录。然后再次改变状态,并通过备忘录恢复了原先的状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值