当前位置: 首页 > article >正文

行为型设计模式-备忘录(memento)模式

设计模式汇总:查看

通俗示例

想象一下你正在玩一个角色扮演游戏,在游戏中你有一个角色,随着游戏的进行,角色的状态会不断变化,比如经验值、装备和生命值等。如果游戏中没有保存功能,一旦游戏意外关闭或者你想要重新尝试某个决策,你将不得不重新开始游戏。但是,如果游戏提供了保存功能,你可以随时创建一个“快照”来记录当前角色的状态,如果后续出现了不利的局面,你可以回到这个“快照”来恢复角色的状态。这里的“快照”就是备忘录模式中的备忘录对象,它帮助你保存和恢复游戏状态。

通俗解释

备忘录模式是一种行为型设计模式,它允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。备忘录模式主要包括三个角色:发起人(Originator)、备忘录(Memento)和负责人(Caretaker)。发起人对象负责创建一个备忘录对象来存储其当前状态,负责人对象则负责管理备忘录对象,包括保存和提供备忘录以便恢复状态。

备忘录模式的组成包括以下几部分:

  • 发起人(Originator):创建并在备忘录中存储状态。
  • 备忘录(Memento):存储发起人的内部状态,并且防止外部访问。
  • 负责人(Caretaker):负责保存备忘录对象,通常不关心备忘录的细节。

备忘录模式的优点

  • 保持封装性:发起人不需要暴露其内部状态细节,只需通过备忘录对象来保存和恢复状态。
  • 简化发起人角色:发起人不需要管理和维护历史状态,这些工作由备忘录和负责人来完成。
  • 灵活的状态恢复:可以恢复到任意保存的状态,提供了一种“撤销”或“重做”的操作。

Python代码示例

以下是一个备忘录模式的简单实现:

# 备忘录类
class Memento:
    def __init__(self, state):
        self._state = state
    
    def get_state(self):
        return self._state

# 发起人类
class Originator:
    def __init__(self):
        self._state = None
    
    def set_state(self, state):
        self._state = state
    
    def save_state(self):
        return Memento(self._state)
    
    def restore_state(self, memento):
        self._state = memento.get_state()

# 负责人类
class Caretaker:
    def __init__(self):
        self._mementos = []
    
    def add_memento(self, memento):
        self._mementos.append(memento)
    
    def get_memento(self, index):
        return self._mementos[index]

# 客户端代码
if __name__ == "__main__":
    # 创建发起人和负责人
    originator = Originator()
    caretaker = Caretaker()
    
    # 设置发起人状态并保存
    originator.set_state("State #1")
    saved_state = originator.save_state()
    caretaker.add_memento(saved_state)
    
    # 更改发起人状态
    originator.set_state("State #2")
    
    # 恢复到之前保存的状态
    originator.restore_state(caretaker.get_memento(0))
    print(f"Restored state: {originator._state}")

在这个例子中,Memento类是备忘录,它有一个方法get_state来获取保存的状态。Originator类是发起人,它有save_staterestore_state方法来保存和恢复状态。Caretaker类是负责人,负责保存备忘录对象。客户端代码演示了如何使用备忘录模式来保存和恢复对象的状态。

总结

备忘录模式通过备忘录对象来捕获和存储另一个对象的内部状态,使得这些状态可以在以后被恢复,而不必暴露对象的具体实现。这种模式在需要实现撤销操作、事务操作或者状态恢复的场景中非常有用。


http://www.kler.cn/a/289514.html

相关文章:

  • spring中r类是什么
  • ElasticSearch学习笔记一:简单使用
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码原理.编码相关api
  • 【p2p、分布式,区块链笔记 DAM】GUN/SEA(Security, Encryption, Authorization) 模块genkey
  • LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略
  • Vim9 语法高亮syntax 在指定的缓冲区和窗口执行命令
  • Shell编程基础知识
  • Trm理论 2(Word2Vec)
  • 如何通过k8s来降低运营成本?
  • cuda编程[5]:矩阵乘法--使用静态共享内存优化
  • C/C++语言基础--函数基础(函数定义、调用、生命周期、递归)
  • Linux服务器CPU和IO的监控利器-iostat简介
  • 【重学 MySQL】一、数据库概述
  • 一个好用的Maven依赖冲突解决插件:Maven Helper
  • Flask wtforms组件的作用
  • 【无人机设计与控制】使用 SimMechanics 在 Simulink 中仿真四旋翼飞行器
  • 认识git和git的基本使用,本地仓库,远程仓库和克隆远程仓库
  • 【WPF中的图形(Shape)】
  • 高端控制台使用过程中如何保证用电安全
  • 分类预测|基于蜣螂优化极限梯度提升决策树的数据分类预测Matlab程序DBO-Xgboost 多特征输入单输出 含基础模型
  • vue2———组件
  • 华为云征文|部署RedisStack+可视化操作
  • Echarts可视化
  • 网络通信特刊合集(二)——CMC特刊推荐
  • 贪心算法---无重叠区间
  • 江协科技stm32————11-1SPI通信协议