news 2026/3/13 19:40:09

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/3/10 7:18:23

每日一练:流星雨

题目描述贝西听说一场非凡的流星雨即将来临;报告称这些流星将撞击地球并摧毁它们所碰到的任何东西。为了安全,她发誓要找到一个安全的位置(一个从未被流星摧毁的地方)。她目前在坐标平面的原点放牧,想要移动到一个新的…

作者头像 李华
网站建设 2026/3/11 17:18:38

21、SNMP网络管理与数据中心发现实战

SNMP网络管理与数据中心发现实战 1. 配置Net - SNMP 当你要在想要监控的客户端上安装Net - SNMP时,应使用主机资源MIB(Management Information Base,管理信息库)来编译Net - SNMP。具体操作步骤如下: ./configure -with-mib-modules=host运行 configure 时,它会尝试…

作者头像 李华
网站建设 2026/3/11 14:54:55

25、技术探索:数据查询、服务器管理与Python包管理

技术探索:数据查询、服务器管理与Python包管理 数据查询代码分析 在数据处理中,我们常常需要从数据存储中获取特定的记录。以下是一段相关代码: collection = [] #grab last 10 records from datastore query = ChangeModel.all().order(-date) records = query.fetch(l…

作者头像 李华
网站建设 2026/3/13 1:48:36

中国独立开发者创业实战指南:从技术到商业的变现路径

中国独立开发者创业实战指南:从技术到商业的变现路径 【免费下载链接】chinese-independent-developer 分享中国独立开发者们正在进行的工作和项目的列表。 项目地址: https://gitcode.com/GitHub_Trending/ch/chinese-independent-developer 在当今技术创业…

作者头像 李华
网站建设 2026/3/13 15:28:30

从零构建大模型智能体:OpenAI Function Calling智能体实战

引言 随着大语言模型逐步具备“理解—推理—行动”的能力,如何让模型稳定、可控地调用外部工具,已成为构建智能体(Agent)系统的关键一环。相比早期基于文本协议的工具调用方式,OpenAI 推出的 Function Calling&#x…

作者头像 李华
网站建设 2026/3/8 10:45:11

‘‘空字符串有索引和没索引怎么存储?

1.如果有索引,那么存储在二级索引中,例如:(,id1)(,id2) 2.如果没有索引,那么存储在主键索引行数据中,例如:(id1,name,pwd123),(id2,name,pwd456)

作者头像 李华