设计模式系列 - 备忘录模式
程序员文章站
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(); } }
总结
备忘录模式常用于数据的可回退操作,这样能解决一些义务处理的误操作。为了节省内存,可使用 原型模式+备忘录模式 的方式。