佛山顺德网站建设公司哪家好,如何做网站的映射,qq安全网页版在线登录,开发微信小程序的软件一、说明
状态模式是一种行为设计模式#xff0c;用于解决对象在不同状态下具有不同行为
(一) 解决问题
在对象行为根据对象状态而改变时#xff0c;规避使用大量的条件语句来判断对象的状态#xff0c;提高系统可维护性
(二) 使用场景
当对象的行为取决于其状态#…
一、说明
状态模式是一种行为设计模式用于解决对象在不同状态下具有不同行为
(一) 解决问题
在对象行为根据对象状态而改变时规避使用大量的条件语句来判断对象的状态提高系统可维护性
(二) 使用场景
当对象的行为取决于其状态并且该状态可以在运行时动态改变时当有大量的条件语句用于控制对象的行为并且这些条件在不同的状态下具有不同的表现时
二、结构 上下文Context保存了对于一个具体状态对象的引用并会将所有与该状态相关的工作委派给它。上下文通过状态接口与状态对象交互且会提供一个设置器用于传递新的状态对象。状态State接口会声明特定于状态的方法。这些方法应能被其他所有具体状态所理解因为你不希望某些状态所拥有的方法永远不会被调用。具体状态ConcreteStates会自行实现特定于状态的方法。为了避免多个状态中包含相似代码你可以提供一个封装有部分通用行为的中间抽象类。状态对象可存储对于上下文对象的反向引用。状态可以通过该引用从上下文处获取所需信息并且能触发状态转移。上下文和具体状态都可以设置上下文的下个状态并可通过替换连接到上下文的状态对象来完成实际的状态转换。
三、伪代码
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__doc__
状态模式例水在不同温度下状态也会不同
from abc import ABC, abstractmethodclass State(ABC):状态基类abstractmethoddef handle(self, temperature):passclass SolidState(State):具体状态类def handle(self, temperature):if temperature 0:return 冰class LiquidState(State):具体状态类def handle(self, temperature):if 0 temperature 100:return 液态水class GaseousState(State):具体状态类def handle(self, temperature):if temperature 100:return 水蒸气class Water:上下文类水def __init__(self):self.state LiquidState()def change_state(self, state):self.state statedef get_state(self, temperature):return self.state.handle(temperature)if __name__ __main__:水在 25 摄氏度时为液态水水在 -5 摄氏度时为冰水在 105 摄氏度时为水蒸气water Water()print(f水在 25 摄氏度时为{water.get_state(25)})water.change_state(SolidState())print(f水在 -5 摄氏度时为{water.get_state(-5)})water.change_state(GaseousState())print(f水在 105 摄氏度时为{water.get_state(105)})四、优缺点
优点
开闭原则无需修改已有状态类和上下文就能引入新状态通过消除臃肿的状态机条件语句简化上下文代码
缺点
可能会导致类的数量增加因为每个状态都需要一个对应的类如果状态转换逻辑过于复杂可能会导致状态类之间的相互调用使得代码难以维护 【Python笔记】设计模式-CSDN博客