备忘录模式(Memento Pattern)是一种行为型设计模式,它通过在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可将该对象恢复到原先保存的状态,这种模式主要用于实现撤销操作,同时也适用于避免重复生成对象。
备忘录模式的主要角色有三个:发起人(Originator)、备忘录(Memento)和负责人类(Caretaker)。
1、发起人(Originator):负责创建一个备忘录,用以记录当前对象的内部状态,同时可以使用备忘录来恢复内部状态。
2、备忘录(Memento):负责存储发起人的某个状态,并可以防止发起人以外的其他对象访问备忘录。
3、负责人类(Caretaker):负责保存备忘录,但不能对备忘录的内容进行操作或检查。
备忘录模式的实现步骤如下:
1、定义发起人类(Originator),包含内部状态和创建备忘录的方法。
public class Originator { private String state; public void set(String state) { this.state = state; } public String get() { return state; } public Memento saveToMemento() { return new Memento(state); } public void restoreFromMemento(Memento memento) { state = memento.getState(); } }
2、定义备忘录类(Memento),包含内部状态的获取方法。
public class Memento { private String state; public Memento(String state) { this.state = state; } public String getState() { return state; } }
3、定义负责人类(Caretaker),包含保存备忘录和恢复备忘录的方法。
import java.util.ArrayList; import java.util.List; public class Caretaker { private List<Memento> mementos = new ArrayList<>(); public void add(Memento memento) { mementos.add(memento); } public Memento get(int index) { return mementos.get(index); } }
4、使用备忘录模式实现撤销操作。
public class Main { public static void main(String[] args) { Originator originator = new Originator(); Caretaker caretaker = new Caretaker(); originator.set("状态1"); caretaker.add(originator.saveToMemento()); // 保存状态1 originator.set("状态2"); caretaker.add(originator.saveToMemento()); // 保存状态2 originator.set("状态3"); System.out.println("当前状态: " + originator.get()); // 输出当前状态3 originator.restoreFromMemento(caretaker.get(0)); // 恢复状态1 System.out.println("恢复后状态: " + originator.get()); // 输出恢复后状态1 } }
通过以上代码,我们可以看到备忘录模式的实现过程,发起人首先创建一个备忘录,然后将其保存到负责人类中,当需要恢复某个状态时,发起人可以从负责人类中取出对应的备忘录,然后恢复到该状态,这种模式可以实现撤销操作,同时也可以避免重复生成对象,提高代码的可维护性和可扩展性。
备忘录模式是一种实用的设计模式,它可以帮助我们实现撤销操作,同时避免重复生成对象,通过使用备忘录模式,我们可以提高代码的可维护性和可扩展性,使程序更加健壮。