备忘录模式是一种行为型设计模式,它通过在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。这种模式适用于那些需要保存/恢复数据相关状态的场景,但只能提供一次保存和恢复操作。
备忘录模式(Memento Pattern)是一种行为型设计模式,用于在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可以将该对象恢复到原先保存的状态,备忘录模式适用于以下场景:
1、需要保存和恢复对象的状态,但不想暴露类的内部实现细节。
2、需要在不违反封装原则的前提下,让多个对象共享同一个备忘录实例。
3、需要提供一个管理备忘录的类,以便客户端可以方便地创建、获取和删除备忘录。
备忘录模式的主要角色有:
1、发起人(Originator):负责创建一个备忘录,用以记录当前对象的内部状态,同时提供备忘录的访问方法。
2、备忘录(Memento):负责存储发起人的内部状态,并提供了访问该状态的方法。
3、管理者(Caretaker):负责管理备忘录,提供对备忘录的创建、获取和删除等方法。
下面是一个简单的备忘录模式实现:
// 发起人 class Originator { private String state; public void setState(String state) { this.state = state; } public String getState() { return state; } public Memento saveToMemento() { return new Memento(state); } public void restoreFromMemento(Memento memento) { state = memento.getState(); } } // 备忘录 class Memento { private String state; public Memento(String state) { this.state = state; } public String getState() { return state; } } // 管理者 class Caretaker { private List<Memento> mementos = new ArrayList<>(); public void addMemento(Memento memento) { mementos.add(memento); } public Memento getMemento(int index) { return mementos.get(index); } } // 客户端 public class Client { public static void main(String[] args) { Originator originator = new Originator(); Caretaker caretaker = new Caretaker(); // 设置初始状态 originator.setState("状态1"); // 保存状态到备忘录 caretaker.addMemento(originator.saveToMemento()); // 修改状态 originator.setState("状态2"); // 再次保存状态到备忘录 caretaker.addMemento(originator.saveToMemento()); // 恢复到某个状态 originator.restoreFromMemento(caretaker.getMemento(0)); System.out.println("恢复到状态1:" + originator.getState()); } }
通过上述代码,我们可以看到备忘录模式是如何实现对象状态的保存与恢复的,发起人负责创建和管理备忘录,而管理者负责提供对备忘录的访问,这样,我们可以在不破坏封装的前提下,轻松地实现状态的保存与恢复。