代码实现思路
- 状态基类:定义所有珠宝状态都必须实现的核心行为(描述、加工)。
- 具体状态类:为每个珠宝状态(原石、粗加工、精加工、成品)实现专属的行为逻辑,并处理状态切换。
- 上下文类(珠宝):持有当前状态的引用,对外提供统一的操作接口,将具体行为委托给当前状态对象执行.
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')
输出:
