# 设计模式 #5.6 Memento备忘录,行为型模式

发布于:2024-04-23 ⋅ 阅读:(22) ⋅ 点赞:(0)

在您提供的备忘录模式的笔记中,已经很好地概述了该模式的主要概念和参与者。为了进一步优化这些笔记,我们可以确保术语的一致性,并清晰地定义每个组件的作用。以下是优化后的笔记内容:

备忘录模式(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