本文共 2178 字,大约阅读时间需要 7 分钟。
备忘录模式(Memento Pattern)是一种设计模式,旨在在不破坏封装的前提下,捕获一个对象的内部状态,并将这个状态存储在一个特定的对象(备忘录)中。这种方式使得在之后可以恢复该对象至存储的状态,以实现撤销或恢复功能。
备忘录模式的实现通常包含三种主要角色:
Originator(原发器):
原发器是一个普通的类,它通过创建一个备忘录来存储当前的内部状态。原发器可以通过_createMemento()方法创建备忘录,并通过_restoreMemento()方法将存储的状态恢复到它的内部状态。原发器通常用于需要保存内部状态的对象。Memento(备忘录):
备忘录用于存储原发器的内部状态。它通常会包含原发器的某些方法的副本,确保在注入备忘录时不直接暴露原发器的内部细节。备忘录的设计可以参考原发器的设计,具体实现方式取决于编程语言和实际需求。Caretaker(负责人):
负责人负责保存备忘录,但不能直接操作或检查备忘录的内容。负责人通常会维护一个容器(如列表、堆栈等),用来存储多个备忘录对象。这使得原发器能够在多次调用 restoring 的时候恢复到不同的历史状态。public class Originator { private String state; public Originator(String state) { this.state = state; } public Memento createMemento() { return new Memento(this); } public void restoreMemento(Memento memento) { state = memento.getState(); } public void setState(String state) { this.state = state; } public String getState() { return state; }}
// 备忘录类,默认可见性,包内可见class Mementoclass Memento { private String state; public Memento(Originator originator) { state = originator.getState(); } public void setState(String state) { this.state = state; } public String getState() { return state; }}
public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; }}
public class Test { public static void main(String[] args) { Originator originator = new Originator("state1"); System.out.println(originator.getState()); Caretaker caretaker = new Caretaker(); caretaker.setMemento(originator.createMemento()); originator.setState("state2"); System.out.println(originator.getState()); originator.restoreMemento(caretaker.getMemento()); System.out.println(originator.getState()); }}
这种模式特别适用于需要多次保存和恢复状态的场景,如文本编辑器的撤销/重做功能,或数据库事务的保存点管理等。
转载地址:http://thflz.baihongyu.com/