"""
- 定义:
当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类
- 优点:
1. 状态模式下,结构清晰,相比于 if...else更简洁
2. 封装性好,外部结构不必知道内部细节
3. 应用场景:行为状态改变的场景. 在各种控制器中非常常见 或 逻辑结构为状态转移图的场景
- 缺点:
1. 在状态较多时,子类不便管理
"""
class LiftState:
"""
# 电梯状态
"""
def open(self):
pass
def close(self):
pass
def run(self):
pass
def stop(self):
pass
class OpenState(LiftState):
def open(self):
print('Open:门已开启!')
return self
def close(self):
print('Open:开始关门!')
print('Open:已经关门')
return StopState()
def run(self):
print('Open: 禁止运行!')
return self
def stop(self):
print('Open: 禁止停止!')
return self
class RunState(LiftState):
def open(self):
print('RUN:禁止开门!')
return self
def close(self):
print('RUN:禁止关闭')
return self
def run(self):
print('RUN:电梯正在运行')
return self
def stop(self):
print('RUN:即将停止!')
print('RUN:已经停止!')
return StopState()
class StopState(LiftState):
def open(self):
print('Stop:门即将打开')
print('Stop:门已打开')
return OpenState()
def close(self):
print('Stop:禁止关门!')
return self
def run(self):
print('Stop:电梯开始运行!')
return RunState()
def stop(self):
print('Stop: 电梯已经停止')
return self
class Context():
lift_state = ''
def getState(self):
"""
# 获取状态
:return:
"""
return self.lift_state
def setState(self, lift_state):
"""
# 设置 电梯状态
:param lift_state:
:return:
"""
self.lift_state = lift_state
def open(self):
"""
# 开门
:return:
"""
self.setState(self.lift_state.open())
def close(self):
"""
# 关门
:return:
"""
self.setState(self.lift_state.close())
def run(self):
"""
# 运行
:return:
"""
self.setState(self.lift_state.run())
def stop(self):
"""
# 停止
:return:
"""
self.setState(self.lift_state.stop())
if __name__ == '__main__':
ctx = Context()
ctx.setState(StopState())
ctx.open()
ctx.run()
ctx.close()
ctx.run()
ctx.stop()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?