news 2026/5/8 19:29:08

Python设计模式:备忘录模式详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python设计模式:备忘录模式详解

更多内容请见: 《Python3案例和总结》 - 专栏介绍和目录

文章目录

    • 一、备忘录模式概述
      • 1.1 什么是备忘录模式?
      • 1.2 解决的问题:状态的安全隔离与恢复
      • 1.3 备忘录模式的结构与角色
      • 1.4 备忘录模式的优缺点
      • 1.5 应用场景
    • 二、 Python代码实现:一个简单的文本编辑器
      • 2.1 步骤1:定义备忘录 和原发器
      • 2.2 步骤2:定义管理者
      • 2.3 步骤3:客户端调用
      • 2.4 执行结果
    • 三、 深入探讨:备忘录的两种实现方式
      • 3.1 深拷贝(Deep Copy)方式
      • 3.2 自定义备忘录类(窄接口)方式

一、备忘录模式概述

1.1 什么是备忘录模式?

备忘录模式属于行为型设计模式,其核心思想是:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

想象一下你正在玩一款角色扮演游戏。在挑战一个艰难的地下城之前,你会在存档点保存游戏。这个“存档”就是备忘录。它记录了你角色当前的所有信息:等级、生命值、装备、任务进度等。如果在挑战中失败了,你可以选择“读取存档”,角色的一切都将恢复到保存时的状态。在这个过程中,游戏系统(原发器)负责创建存档,存档本身(备忘录)只负责存储数据,而你(管理者/负责人)决定何时保存和何时读取。

1.2 解决的问题:状态的安全隔离与恢复

备忘录模式主要解决两个关键问题:

  1. 保持封装边界:对象的内部状态通常是私有的,不应该暴露给外部对象。备忘录模式通过创建一个独立的“备忘录”对象来存储状态,这个备忘录通常是一个窄接口或私有类,只有原发器才能访问其完整内容,从而保证了状态信息的安全性和封装性。
  2. 提供状态回滚机制:它为用户提供了一种简单、安全的撤销或重做机制。系统可以随时创建当前状态的快照,并在需要时将对象恢复到任何一个历史快照。

1.3 备忘录模式的结构与角色

备忘录模式通常包含以下三个核心角色:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 3:01:22

GitHub Actions下载工件完整指南:快速掌握artifact管理技巧

GitHub Actions下载工件完整指南:快速掌握artifact管理技巧 【免费下载链接】download-artifact 项目地址: https://gitcode.com/gh_mirrors/do/download-artifact GitHub Actions中的download-artifact插件是CI/CD流程中不可或缺的工具,专门用于…

作者头像 李华
网站建设 2026/5/8 1:48:08

别再“盲人摸象”:当IT资产管理始于精准的自动发现

每个IT团队都梦想过这样一个场景:打开一个控制台,公司内所有终端设备——无论它在总部机房、分支机构,还是员工的家里——都清晰在列。硬件配置、软件清单、补丁状态、位置信息一目了然,实时更新。但现实往往是:新同事…

作者头像 李华
网站建设 2026/5/7 4:41:42

基于单片机的跌倒检测和报警系统设计与实现(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T4042309M设计简介:本设计是基于单片机的跌倒检测和报警系统设计与实现,主要实现以下功能:通过加速度传感器检测摔倒情况…

作者头像 李华
网站建设 2026/5/6 22:54:41

Coze 工作原理与应用实例:从零打造 AI Agent

Coze 工作原理与应用实例:从零打造 AI Agent 摘要:Coze(中文名:扣子)是字节跳动推出的一站式 AI Bot 开发平台。不同于简单的对话框,Coze 允许开发者通过低代码/无代码的方式,将大语言模型&…

作者头像 李华
网站建设 2026/5/1 2:48:25

销售全链路透视:AI CRM系统的数据闭环

在传统的企业管理认知中,CRM(客户关系管理)系统常常扮演着一个矛盾的角色。一方面,它是记录客户信息的中央资料库,承载着企业最宝贵的资产;另一方面,它却常常沦为一个冰冷、被动的数据库&#x…

作者头像 李华
网站建设 2026/5/4 22:30:53

Linux学习日记18:线程的分离

一、前言前面我们学习了线程的一些基础知识&#xff0c;学习了线程的创建与使用&#xff0c;今天我们来学习线程的分离与同步。二、线程分离2.1、函数原型函数原型如下&#xff1a;#include <pthread.h> int pthread_detach(pthread_t thread);参数&#xff1a;thread&am…

作者头像 李华