大话设计模式-备忘录模式
备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。
备忘录模式的特点
备忘录模式比较适用于比较复杂但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,发起人可以根据保存的备忘录信息还原到前一状态。
使用备忘录可以把复杂的对象内部信息对其他的对象屏蔽起来,恰当地保持封装的边界。
当角色的状态改变时,有可能这个状态无效,这个时候就可以使用暂时存储起来的备忘录将状态复原。
备忘录模式结构演示
发起人
负责创建一个备忘录,用来记录当前时刻他的内部状态,并可以使用备忘录恢复内部状态,可以根据需要决定备忘录存储哪些状态。
class Originator{ public string State { get; set; } public Memento CreateMemento() => new Memento(State); public void SetMemento(Memento memento) => State = memento.State; public void Show() => Console.WriteLine($"当前状态时:{State}"); }
备忘录
负责存储发起人类的对象的内部信息,并可防止发起人以外的其他对象访问备忘录。
其有两个接口,发起人能看到一个宽接口们可以允许发起人访问返回先前状态所需的所有数据,管理者能看到一个窄接口,只能将备忘录传递给其他对象。
class Memento{ public string State { get; private set; } public Memento(string state) => State = state; }
管理者
负责保存好备忘录,不能对备忘录的内容进行操作或者检查。
class Caretaker{ public Memento Memento { get; set; } }
测试
Originator o = new Originator(); o.State = "开启"; o.Show(); //管理者存储备忘录 Caretaker c = new Caretaker(); c.Memento = o.CreateMemento(); //更改状态 o.State = "关闭"; o.Show(); //恢复状态 o.SetMemento(c.Memento); o.Show(); 当前状态时:开启 当前状态时:关闭 当前状态时:开启