备忘录模式是一种对象行为型模式,它在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。 该模式又叫快照模式。,,备忘录模式提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。简化了发起人类。发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理者进行管理,这符合单一职责原则。
备忘录模式(Memento Pattern)是一种行为型设计模式,它的主要目的是在不破坏封装性的前提下,实现数据的保存与恢复,这种模式通常用于那些需要保存对象状态的场景,以便在程序运行过程中可以随时恢复到之前的状态,备忘录模式的核心思想是将一个对象的状态保存在一个独立的存储对象中,以便在需要时可以恢复到这个状态。
备忘录模式的主要角色有以下几个:
1、发起人(Originator):负责创建备忘录对象,并将当前对象的状态保存到备忘录中,发起人也需要提供一个方法来获取之前保存的状态。
2、备忘录(Memento):负责保存发起人对象的状态,备忘录需要提供一个方法来获取之前保存的状态,以及一个方法来恢复到之前的状态。
3、监听者(Caretaker):负责管理备忘录对象,当备忘录对象不再需要时,将其保存起来,以便后续需要时可以恢复,监听者也需要提供一个方法来从备忘录中恢复之前保存的状态。
4、指挥者(Director):负责协调发起人、备忘录和监听者之间的交互,指挥者需要提供一个方法来通知备忘录创建一个新的备忘录对象,并将当前对象的状态保存到新的备忘录中,指挥者还需要提供一个方法来通知监听者从备忘录中恢复之前保存的状态。
下面是一个简单的备忘录模式的实现示例:
class Originator: def __init__(self): self.state = "初始状态" def setState(self, state): self.state = state def getState(self): return self.state class Memento: def __init__(self, state): self._state = state def getState(self): return self._state def restoreState(self): return self._state class Caretaker: _mementos = [] def add(self, memento): self._mementos.append(memento) def remove(self): if len(self._mementos) > 0: return self._mementos.pop() else: return None class Director: def __init__(self, originator): self._originator = originator self._caretaker = Caretaker() self._memento = None def saveStateToMemento(self): self._memento = Memento(self._originator.getState()) self._caretaker.add(self._memento) print("已保存当前状态") def getStateFromMemento(self): self._memento = self._caretaker.remove() if self._memento is not None: self._originator.setState(self._memento.restoreState()) print("已恢复之前状态") else: print("没有可恢复的状态")
在这个示例中,我们定义了一个Originator类来表示发起人,它有一个state属性来表示当前状态,我们还定义了一个Memento类来表示备忘录,它有一个_state属性来保存之前的状态,以及getState和restoreState方法来获取和恢复之前的状态,我们还定义了一个Caretaker类来管理备忘录对象,它有一个_mementos列表来保存所有创建的备忘录对象,我们定义了一个Director类来协调发起人、备忘录和监听者之间的交互,它提供了saveStateToMemento和getStateFromMemento方法来保存和恢复状态。