设计模式(十九):备忘录模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式(十九):备忘录模式相关的知识,希望对你有一定的参考价值。

一、定义

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态

二、实例

2.1 发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。

 public class Originator
    {
        private string state = string.Empty;
        public string GetState()
        {
            return state;
        }
        public void SetState(string _state)
        {
            state = _state;
        }
        public Memento CreatMemento()
        {
            return new Memento(state);
        }
        public void RestoreMemento(Memento _memento)
        {
            SetState(_memento.GetState());
        }
    }

2.2 备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。

public class Memento
    {
        private string state = string.Empty;
        public Memento(string _state)
        {
            state = _state;
        }
        public string GetState()
        {
            return state;
        }
        public void SetState(string _state)
        {
            state = _state;
        }
    }

2.3 管理角色:对备忘录进行管理,保存和提供备忘录。

public class Caretaker
    {
        private Memento memento;
        public void SetMemento(Memento _memento)
        {
            memento = _memento;
        }
        public Memento GetMemento()
        {
            return memento;
        }
    }

2.4 客户端:

//-------------------------备忘录模式---------------------
            Memento.Originator originator = new Memento.Originator();
            originator.SetState("初始状态—1");
            Console.WriteLine("初始状态:{0}", originator.GetState());
            //备忘状态
            Memento.Caretaker caretaker = new Memento.Caretaker();
            caretaker.SetMemento(originator.CreatMemento());
            //修改状态
            originator.SetState("状态—2");
            Console.WriteLine("修改状态:{0}", originator.GetState());
            //恢复状态
            originator.RestoreMemento(caretaker.GetMemento());
            Console.WriteLine("恢复后状态:{0}", originator.GetState());
            Console.ReadKey();

结果:

技术分享

三、总结

优:

  • 当发起人角色中的状态改变时,有可能这是个错误的改变,我们使用备忘录模式就可以把这个错误的改变还原。
  • 备份的状态是保存在发起人角色之外的,这样,发起人角色就不需要对各个备份的状态进行管理。

缺:

  • 在实际应用中,备忘录模式都是多状态和多备份的,发起人角色的状态需要存储到备忘录对象中,对资源的消耗是比较严重的。

以上是关于设计模式(十九):备忘录模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式第20篇:备忘录模式

PHP设计模式之备忘录模式

设计模式-行为型-10-备忘录模式

备忘录模式——HeadFirst设计模式学习笔记

Head First设计模式之备忘录模式

备忘录模式