Java实现备忘录模式
备忘录模式是一种行为型设计模式,用于捕获一个对象的内部状态,并在需要时将其恢复回来,而无需暴露对象的实现细节。该模式通过将对象状态封装在备忘录对象中,可以实现对象状态的保存和恢复,同时还可以防止外部代码直接访问对象的状态。 适用场景: 1. 当需要保存和恢复对象的内部状态时,可以使用备忘录模式。例如,在某个应用程序中,用户可以撤销一些操作,这就需要将对象的状态进行保存,以便在需要时进行恢复。 2. 当想要封装对象的状态,不让外部代码直接访问对象的状态时,可以使用备忘录模式。 好处: 1. 提供了对象状态的保存和恢复能力,使得对象的状态管理更加方便和灵活。 2. 将对象状态封装在备忘录对象中,可以防止外部代码直接访问对象的状态,增加了对象的封装性和安全性。 下面是一个基于Java的备忘录模式的完整样例代码: 首先,我们需要创建备忘录类(Memento)来保存对象的状态: ```java public class Memento { private String state; public Memento(String state) { this.state = state; } public String getState() { return state; } } ``` 然后,我们需要创建一个原始对象(Originator),用于创建备忘录和恢复状态: ```java public class Originator { private String state; public void setState(String state) { this.state = state; } public Memento saveStateToMemento() { return new Memento(state); } public void restoreStateFromMemento(Memento memento) { this.state = memento.getState(); } } ``` 最后,我们需要创建一个管理者(Caretaker)来管理备忘录对象: ```java public class Caretaker { private List<Memento> mementoList = new ArrayList<>(); public void addMemento(Memento memento) { mementoList.add(memento); } public Memento getMemento(int index) { return mementoList.get(index); } } ``` 使用备忘录模式的例子如下: ```java public class Main { public static void main(String[] args) { Originator originator = new Originator(); Caretaker caretaker = new Caretaker(); originator.setState("State1"); originator.setState("State2"); caretaker.addMemento(originator.saveStateToMemento()); originator.setState("State3"); caretaker.addMemento(originator.saveStateToMemento()); originator.setState("State4"); System.out.println("Current state: " + originator.getState()); originator.restoreStateFromMemento(caretaker.getMemento(0)); System.out.println("Restored state: " + originator.getState()); } } ``` 运行以上代码,输出结果为: ``` Current state: State4 Restored state: State2 ``` 在这个例子中,Originator保存了不同状态的备忘录对象,Caretaker用于保存和获取备忘录对象。通过保存和恢复对象的内部状态,我们可以随时恢复对象到之前的状态。