python: State Pattern

代码实现思路

  1. 状态基类:定义所有珠宝状态都必须实现的核心行为(描述、加工)。
  2. 具体状态类:为每个珠宝状态(原石、粗加工、精加工、成品)实现专属的行为逻辑,并处理状态切换。
  3. 上下文类(珠宝):持有当前状态的引用,对外提供统一的操作接口,将具体行为委托给当前状态对象执行.
python 复制代码
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:状态模式 State Pattern
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2026/2/19 9:02
# User      : geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : JewelState.py
# explain   : 学习
 
from abc import ABC, abstractmethod
 
# ---------------------- 1. 状态基类 ----------------------
class JewelState(ABC):
    """
    珠宝状态的抽象基类,定义所有状态必须实现的方法
    """
    def __init__(self, jewel):
        # 持有上下文(珠宝)的引用,用于状态切换
        self.jewel = jewel
 
    @abstractmethod
    def describe(self):
        """
        描述当前状态的珠宝
        """
        pass
 
    @abstractmethod
    def process(self):
        """
        执行加工操作(不同状态下加工行为不同)
        """
        pass
python 复制代码
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:状态模式 State Pattern
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2026/2/19 9:03
# User      : geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : RawState.py
# explain   : 学习
 
 
from StatePattern.JewelState import JewelState
from StatePattern.RoughProcessedState import RoughProcessedState
 
 
# ---------------------- 2. 具体状态类 ----------------------
class RawState(JewelState):
    """
    原石状态:未经过任何加工
    """
    def describe(self):
        """
 
        """
 
        return f"【{self.jewel.name}】- 原石状态:表面粗糙,无光泽,仅能看到基础材质。"
 
    def process(self):
        """
 
        """
        # 原石只能粗加工,加工后切换到粗加工状态
        print(f"正在对{self.jewel.name}进行粗加工...")
        self.jewel.set_state(RoughProcessedState(self.jewel))
        return f"{self.jewel.name}完成粗加工,进入粗加工状态!"
 
 
 
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:状态模式 State Pattern
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2026/2/19 9:05
# User      : geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : FineProcessedState.py
# explain   : 学习
from StatePattern.JewelState import JewelState
from StatePattern.FinishedState import FinishedState
 
 
# ---------------------- 2. 具体状态类 ----------------------
 
class FineProcessedState(JewelState):
    """
    精加工状态:打磨抛光,细节完善
    """
    def describe(self):
        """
 
        """
        return f"【{self.jewel.name}】- 精加工状态:表面抛光,形状规整,已有明显光泽。"
 
    def process(self):
        """
 
        """
        # 精加工后可做成成品,加工后切换到成品状态
        print(f"正在将{self.jewel.name}制作成成品...")
        self.jewel.set_state(FinishedState(self.jewel))
        return f"{self.jewel.name}完成成品制作,进入成品状态!"
 
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:状态模式 State Pattern
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2026/2/19 9:06
# User      : geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : FinishedState.py
# explain   : 学习
 
from StatePattern.JewelState import JewelState
 
 
 
# ---------------------- 2. 具体状态类 ----------------------
class FinishedState(JewelState):
    """
    粗加工状态:去除杂质,初步塑形
    """
    def describe(self):
        """
 
        """
        return f"【{self.jewel.name}】- 成品状态:工艺完整,光泽饱满,可直接售卖/佩戴!"
 
    def process(self):
        """
 
        """
        # 成品无法再加工,返回提示
        return f"⚠️ {self.jewel.name}已是成品,无需再加工!"
 
 
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:状态模式 State Pattern
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2026/2/19 9:04
# User      : geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : RoughProcessedState.py
# explain   : 学习
 
from StatePattern.JewelState import JewelState
from StatePattern.FineProcessedState import FineProcessedState
 
# ---------------------- 2. 具体状态类 ----------------------
 
class RoughProcessedState(JewelState):
    """
    粗加工状态:去除杂质,初步塑形
    """
    def describe(self):
        """
 
        """
        return f"【{self.jewel.name}】- 粗加工状态:已去除杂质,有基础形状,但细节粗糙。"
 
    def process(self):
        """
 
        """
        # 粗加工后可精加工,加工后切换到精加工状态
        print(f"正在对{self.jewel.name}进行精加工...")
        self.jewel.set_state(FineProcessedState(self.jewel))
        return f"{self.jewel.name}完成精加工,进入精加工状态!"
python 复制代码
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:状态模式 State Pattern
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2026/2/19 9:09
# User      : geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : Jewel.py
# explain   : 学习
from StatePattern.RawState import RawState
 
 
# ---------------------- 3. 上下文类(珠宝) ----------------------
class Jewel:
    """
    珠宝类(上下文):持有当前状态,对外提供统一操作接口
    """
    def __init__(self, name):
        """
 
        """
        self.name = name
        # 初始状态为原石
        self._state = RawState(self)
 
    def set_state(self, state):
        """
        切换珠宝状态(核心:状态由具体状态类触发,上下文仅接收)
        """
        self._state = state
 
    def describe(self):
        """
        委托给当前状态的describe方法
        """
        return self._state.describe()
 
    def process(self):
        """
        委托给当前状态的process方法
        """
        return self._state.process()
python 复制代码
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:状态模式 State Pattern
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2026/2/19 9:11
# User      : geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : StateBll.py
# explain   : 学习
 
from StatePattern.Jewel import Jewel
 
class StateBll(object):
    """
 
    """
 
    def demo(self):
        """
 
        """
        # 创建一个钻石珠宝实例
        diamond = Jewel("钻石")
 
        # 初始状态:原石
        print(diamond.describe())
        # 执行加工:原石→粗加工
        print(diamond.process())
        print("-" * 50)
 
        # 当前状态:粗加工
        print(diamond.describe())
        # 执行加工:粗加工→精加工
        print(diamond.process())
        print("-" * 50)
 
        # 当前状态:精加工
        print(diamond.describe())
        # 执行加工:精加工→成品
        print(diamond.process())
        print("-" * 50)
 
        # 当前状态:成品
        print(diamond.describe())
        # 尝试加工成品(无效果)
        print(diamond.process())

调用:

python 复制代码
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2026/2/18 20:58
# User      : geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : main.py
# explain   : 学习
from bll.MementoBll import MementoBll
from bll.CommandBll import CommandBll
from bll.StateBll import StateBll
 
if __name__ == '__main__':
 
    #实现备忘录模式(Memento Pattern)
    #mementobll= MementoBll()
    #mementobll.demo()
    #命令模式(Command Pattern)
    #commandBll= CommandBll()
    #commandBll.demo()
    # 状态模式 State Pattern
    stateBll =StateBll()
    stateBll.demo()
    print('PyCharm')

输出:

相关推荐
清水白石0081 小时前
从频繁“握手”到高效通行:Python 数据库连接池深度解析与调优实战
开发语言·数据库·python
雪碧聊技术2 小时前
生成器是什么?有什么用?
python·生成器·yield
岱宗夫up2 小时前
FastAPI进阶3:云原生架构与DevOps最佳实践
前端·python·云原生·架构·前端框架·fastapi·devops
~央千澈~2 小时前
抖音弹幕游戏开发之第15集:添加配置文件·优雅草云桧·卓伊凡
java·前端·python
进阶的鱼2 小时前
一文了解RAG———检索增强生成
人工智能·python·ai编程
测试工坊2 小时前
Android 内存采集避坑指南:一个命令 5ms,一个命令 15 秒,你选哪个?
python
JaydenAI2 小时前
[拆解LangChain执行引擎]回到过去,开启平行世界[上篇]
python·langchain
datalover2 小时前
spring security自定义表结构处理
数据库·python·spring
励ℳ2 小时前
【生信绘图】基因组大小与CDS数量关系的可视化
python·信息可视化