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

2024-05-09 1944阅读

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

# 设计模式 #5.6 Memento备忘录,行为型模式
(图片来源网络,侵删)

备忘录模式(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
          
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]