1、发起人(Originator):负责创建备忘录对象,以及设置和获取当前状态。
2、备忘录(Memento):负责保存发起人的状态,以便稍后可以恢复。
3、监听者(Caretaker):负责管理备忘录对象,当备忘录对象不再需要时,将其存储起来,以便后续使用。
4、指挥者(Director):负责控制发起人、备忘录和监听者之间的交互,以实现备忘录模式的功能。
备忘录模式的主要优点如下:
1、封装性强:通过将状态信息存储在备忘录对象中,可以将状态信息与发起人分离,降低系统的耦合度。
2、可恢复性:备忘录模式允许在需要时恢复到之前的状态,这对于需要撤销操作的场景非常有用。
3、支持动态更新:备忘录模式可以在不破坏原有状态的基础上,对状态进行更新,这使得系统更加灵活。
备忘录模式的典型应用场景包括:文本编辑器、图形用户界面等需要撤销和重做操作的应用。
下面是一个简单的备忘录模式的Python实现:
class Memento: def __init__(self, state): self._state = state def get_state(self): return self._state class Originator: def __init__(self): self._state = None self._memento = None def set_state(self, state): self._state = state self._memento = Memento(state) def get_state(self): return self._state def save_to_memento(self): return self._memento.get_state() def restore_from_memento(self, memento): self._state = memento.get_state() self._memento = memento class Caretaker: _memos = [] @staticmethod def add_memento(originator, memento): originator.restore_from_memento(memento) Caretaker._memos.append((originator, memento)) @staticmethod def remove(originator): originator.set_state("") Caretaker._memos = [(o, m) for o, m in Caretaker._memos if o != originator]
在这个实现中,Originator
类负责管理状态,Memento
类负责保存状态,Caretaker
类负责管理备忘录对象,当需要恢复到之前的状态时,可以从Caretaker
中找到相应的备忘录对象,然后调用Originator
的restore_from_memento
方法进行恢复。