在您提供的备忘录模式的笔记中,已经很好地概述了该模式的主要概念和参与者。为了进一步优化这些笔记,我们可以确保术语的一致性,并清晰地定义每个组件的作用。以下是优化后的笔记内容:
备忘录模式(Memento Pattern)
定义:
备忘录模式是一种行为型设计模式,它允许在不破坏对象封装性的情况下捕获对象的内部状态,并将该状态外部化存储,以便在需要时可以恢复到原先的状态。此模式常用于实现撤销操作和历史记录功能。
参与者:
Memento(备忘录):
- 存储 Originator(原发器)对象的内部状态。
- 保护其内容不被除 Originator 之外的任何对象直接访问。
- 为 Originator 提供一个窄接口,允许它访问和恢复状态。
- 原发起能够看到一个宽接口,允许他访问返回到先前状态所需的所有数据。
- 理想状态:只允许生成备忘录的那个原发器访问本备忘录的内部状态。
Originator(原发器):
- 创建 Memento 对象以保存当前状态。
- 可以利用 Memento 对象恢复之前保存的状态。
Caretaker(负责人):
- 负责保存 Memento 对象。
- 不能对 Memento 的内容进行操作或检查,以维护封装性。
示例(Python)
以下是使用 Python 语言实现的备忘录模式示例:
class Originator:
def __init__(self):
self._state = None
def set_state(self, state):
self._state = state
def get_state(self):
return self._state
def save_to_memento(self):
# 创建备忘录,保存当前状态
return Memento(self._state)
def restore_from_memento(self, memento):
# 从备忘录恢复状态
self._state = memento.get_state()
class Memento:
def __init__(self, state):
self._state = state
def get_state(self):
# 仅供 Originator 使用
return self._state
class Caretaker:
def __init__(self):
self._memento = None
def save_memento(self, memento):
# 保存备忘录
self._memento = memento
def retrieve_memento(self):
# 检索备忘录
return self._memento
# 客户端代码
if __name__ == "__main__":
originator = Originator()
originator.set_state("State #1")
caretaker = Caretaker()
# 保存状态到备忘录
caretaker.save_memento(originator.save_to_memento())
# 更改状态
originator.set_state("State #2")
print(f"Current State: {originator.get_state()}") # 输出: Current State: State #2
# 从备忘录恢复状态
originator.restore_from_memento(caretaker.retrieve_memento())
print(f"Restored State: {originator.get_state()}") # 输出: Restored State: State #1