欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

设计模式系列 - 备忘录模式

程序员文章站 2024-01-13 11:34:16
备忘录模式通过保存一个对象的某个状态,以便在需要的时候恢复该对象。 介绍 备忘录模式属于行为型模式,它通过在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 类图描述 代码实现 1、创建实体类 2、创建状态处理类 3、创建储存集合 4、上层调用 总结 备忘录模式常用于数据的 ......

备忘录模式通过保存一个对象的某个状态,以便在需要的时候恢复该对象。

介绍

备忘录模式属于行为型模式,它通过在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

类图描述

设计模式系列 - 备忘录模式

代码实现

1、创建实体类

public class memento
{
    private string state;
    public memento(string state)
    {
        this.state = state;
    }

    public string getstate() => state;
}

2、创建状态处理类

public class originator
{
    private string state;
    public void setstate(string state)
    {
        this.state = state;
    }

    public string getstate()
    {
        return state;
    }

    public memento savestatetomemento()
    {
        return new memento(this.state);
    }

    public void getstatefrommemento(memento memento)
    {
        state = memento.getstate();
    }
}

3、创建储存集合

public class caretaker
{
    private list<memento> mementolist = new list<memento>();

    public void add(memento state)
    {
        mementolist.add(state);
    }

    public memento get(int index)
    {
        return mementolist[index];
    }
}

4、上层调用

class program
{
    static void main(string[] args)
    {
        originator originator = new originator();
        caretaker caretaker = new caretaker();
        originator.setstate("state #1");
        originator.setstate("state #2");
        caretaker.add(originator.savestatetomemento());
        originator.setstate("state #3");
        caretaker.add(originator.savestatetomemento());
        originator.setstate("state #4");

        console.writeline($"current state:{originator.getstate()}");
        originator.getstatefrommemento(caretaker.get(0));
        console.writeline($"first saved state:{originator.getstate()}");
        originator.getstatefrommemento(caretaker.get(1));
        console.writeline($"second saved state:{originator.getstate()}");

        console.readkey();
    }
}

总结

备忘录模式常用于数据的可回退操作,这样能解决一些义务处理的误操作。为了节省内存,可使用 原型模式+备忘录模式 的方式。