news 2026/9/21 5:43:40

Python设计模式:状态模式详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python设计模式:状态模式详解

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

文章目录

    • 一、状态模式概述
      • 1.1 状态模式的定义
      • 1.2 状态模式的核心思想
      • 1.3 状态模式的结构与角色
      • 1.4 状态模式的优缺点
      • 1.5 与其他模式的区别
      • 1.6 适用场景
    • 二、代码实现
      • 2.1 步骤 1:定义抽象状态
      • 2.2 步骤 2:实现具体状态类
      • 2.3 步骤 3:定义上下文
      • 2.4 步骤 4:客户端调用
      • 2.5 执行结果

一、状态模式概述

想象一下,你正在开发一个在线文档编辑器。这个编辑器有多种状态:草稿审阅中已发布。在不同的状态下,用户能执行的操作是完全不同的。在“草稿”状态下,你可以自由编辑;在“审阅中”状态下,你只能查看,不能编辑;在“已发布”状态下,你只能评论,不能修改内容。

如果用传统的if-elseswitch语句来处理,代码会迅速变成一团难以维护。每增加一个状态或修改一个行为的逻辑,你都需要深入到一个巨大的方法中去修改核心的if-else结构,这违反了开闭原则(对扩展开放,对修改关闭),也让代码的阅读和测试变得异常痛苦。

状态模式正是为了解决这类问题而生。它允许一个对象在其内部状态改变时,改变它的行为,对象看起来似乎修改了它的类。

1.1 状态模式的定义

定义:允许一个对象在其内部状态改变时改变它的行为。这个对象看起来像是改变了它的类。这句话听起来有点绕,我们把它拆解开:

  • “一个对象”:指的是拥有状态的对象,我们称之为上下文。比如,上面例子中的“文档”就是上下文。
  • “内部状态”:指的是对象在某一时刻的具体情况,比如“草稿”、“审阅中”。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/21 13:03:33

Day 38 - Dataset 和 DataLoader

在深度学习任务中,数据处理是至关重要的一环。面对大规模数据集,显存往往无法一次性存储所有数据,因此需要采用分批训练(Batch Training)的策略。PyTorch 提供了两个核心工具类来解决数据加载和预处理的问题&#xff1…

作者头像 李华
网站建设 2026/9/22 0:26:21

[C#][winform]基于yolov11的打架行为检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】在社会治安管理朝着智能化、精细化方向加速推进的重要阶段,及时且精准地监测公共场所中的打架行为,已然成为维护社会秩序稳定、保障公民人身安全以及提升城市治理水平的核心任务之一。公共场所作为人员密集且流动频繁的区域,其环…

作者头像 李华
网站建设 2026/9/21 22:15:25

2022年TRC SCI1区TOP,基于随机分形搜索算法的多无人机四维航迹优化自适应冲突消解方法,深度解析+性能实测

目录1.摘要2.基于风险的4D航线与飞行冲突建模3.冲突解决和4D路线优化4.随机分形搜索算法5.结果展示6.参考文献7.代码获取8.算法辅导应用定制读者交流1.摘要 随着无人航空系统在城市低空的快速发展,安全高效的低空交通管理亟需突破。飞前四维航迹优化是实现冲突探测…

作者头像 李华
网站建设 2026/9/22 1:36:49

《智能世界2035》——华为预测十年以后智能世界的模样

导语:如果回到十年前,你会做什么?如果你知道十年后的样子,现在你会做什么?如果把 2025 比作 AI 的“青春期”,那么 2035 将是它真正走向社会的“成人礼”。华为《智能世界2035》 用130 页的战略报告介绍了 …

作者头像 李华
网站建设 2026/9/21 19:43:00

FLAC3D随机裂隙建模:从基础到复杂网络

FLAC3D随机裂隙,fractureFLAC3D作为一款功能强大的离散元数值模拟软件,在岩石力学领域有着广泛的应用。其中,随机裂隙网络的建模是岩石力学研究中的重要一环,因为它能够更好地反映实际岩石中的复杂结构。本文将介绍如何在FLAC3D中…

作者头像 李华
网站建设 2026/9/22 2:24:57

终极指南:TUnit服务虚拟化测试实践

终极指南:TUnit服务虚拟化测试实践 【免费下载链接】TUnit A modern, fast and flexible .NET testing framework 项目地址: https://gitcode.com/GitHub_Trending/tun/TUnit 在当今的软件开发中,你是否经常遇到这样的困扰:测试因为外…

作者头像 李华