设计模式--第二十章 备忘录模式

第一章 前言
第二章 观察者模式
第三章 状态模式
第四章 中介模式
第五章 装饰器模式
第六章 单例模式
第七章 克隆模式
第八章 职责链模式
第九章 代理模式
第十章 外观模式
第十一章 迭代模式
第十二章 组合模式
第十三章 构建模式
第十四章 适配模式
第十五章 策略模式
第十六章 简单工厂模式
第十七章 工厂方法模式
第十八章 抽象工厂模式
第十九章 命令模式
第二十章 备忘录模式
第二十一章 享元模式
第二十二章 访问模式
第二十三章 模板模式
第二十四章 桥接模式
第二十五章 解释器模式
第二十六章 过滤器模式
第二十七章 对象池技术
第二十八章 回调机制
第二十九章 MVC模式
附录


第二十章 备忘录模式

  • 1. 核心思想
  • 2. UML类图
  • 3. 框架代码
  • 4. 模型说明
    • 4.1 设计要点
    • 4.2 优缺点
  • 5. 应用场景


1. 核心思想

在不破坏内部结构的前提下捕获一个对象的内部状态,这样便可在以后将该对象恢复到原先保存的状态。

备忘模式的最大功能就是备份,可以保存对象的一个状态作为备份,这样便可让对象在将来的某一时刻恢复到之前保存的状态。

如游戏中死了的英雄可以满血复活,很多电器(如电视、冰箱)都有恢复出厂设置功能;再如很多虚拟机管理软件(如VMware)都可以保存快照,这样在操作系统出现问题时可以快速地恢复到保存的某个点。

2. UML类图

设计模式--第二十章 备忘录模式_第1张图片

3. 框架代码

from abc import ABC,abstractmethod

class Memento:
    def __init__(self, state) -> None:
        self._state = state

    def setState(self, state):
        self._state = state

    def getState(self):
        return self._state

class Originator:
    def __init__(self, state=None) -> None:
        self.state = state

    def createMemento(self):
        return Memento(self.state)

    def restoreFromMemento(self, memento:Memento):
        self.state = memento.getState()

    def __str__(self) -> str:
        return f"state: {self.state}"

class Caretaker:
    def __init__(self) -> None:
        self._memento = None
    
    def getMemento(self):
        return self._memento

    def setMemento(self, memento:Memento):
        self._memento = memento

if __name__ == "__main__":
    # originator状态为“on”
    originator = Originator()
    originator.state = "on"
    print(originator)

    # 备忘记录状态
    caretaker = Caretaker()
    caretaker.setMemento(originator.createMemento())

    # originator更新状态为“off”
    originator.state = "off"
    print(originator)

    # originator恢复“off”状态
    originator.restoreFromMemento(caretaker.getMemento())
    print(originator)

4. 模型说明

4.1 设计要点

备忘模式中主要有三个角色,在设计备忘模式时要找到并区分这些角色。

  1. 发起人(Originator):需要进行备份的对象。
  2. 备忘录(Memento):备份的状态,即一个备份的存档。
  3. 备忘录管理者(Caretaker):备份存档的管理者,由它负责与发起人的交互。

4.2 优缺点

  1. 优点
    • 提供了一种可以恢复状态的机制,使得用户能够比较方便地回到某个历史状态。
    • 实现了信息的封装,用户不需要关心状态的保存细节。
  2. 缺点
    • 如果类的成员变量过多,势必会占用比较多的资源,而且每一次保存都会消耗一定的内存。此时可以限制保存的次数。

5. 应用场景

  1. 需要保存/恢复对象的状态或数据时,如游戏的存档、虚拟机的快照。
  2. 需要实现撤销、恢复功能的场景,如Word中的Ctrl+Z、Ctrl+Y功能,DOS命令行或Linux终端的命令记忆功能。
  3. 提供一个可回滚的操作,如数据库的事务管理。

你可能感兴趣的:(设计模式,python,设计模式,备忘录模式)