尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

状态模式是一种行为型设计模式,它将对象的不同状态及其对应的行为封装成独立的类

状态模式是一种行为型设计模式,它将对象的不同状态及其对应的行为封装成独立的类 这描述的是状态模式State Pattern。状态模式是一种行为型设计模式它将对象的不同状态及其对应的行为封装成独立的类使对象在内部状态变化时其行为可以动态地随之改变而无需使用大量条件语句如 if-else 或 switch从而提高可维护性和可扩展性。fromabcimportABC,abstractmethodclassState(ABC):abstractmethoddefhandle(self,context):passclassConcreteStateA(State):defhandle(self,context):print(当前状态A执行行为A)context.stateConcreteStateB()classConcreteStateB(State):defhandle(self,context):print(当前状态B执行行为B)context.stateConcreteStateA()classContext:def__init__(self):self._stateConcreteStateA()propertydefstate(self):returnself._statestate.setterdefstate(self,value):self._statevaluedefrequest(self):self._state.handle(self)# 使用示例ctxContext()ctx.request()# 输出当前状态A执行行为Actx.request()# 输出当前状态B执行行为B状态模式与策略模式的核心区别在于意图、职责划分和状态管理方式意图不同状态模式用于封装对象内部状态相关的不同行为使对象在状态变化时“看起来”行为自动改变其核心是状态驱动行为且状态之间通常存在转换关系如 A → B → C → A状态的变更由上下文或状态自身触发。策略模式用于封装一组可互换的算法或行为客户端主动选择并切换策略其核心是策略解耦动态替换策略之间无内在状态依赖或转换逻辑彼此独立、平等。职责与耦合性不同状态模式中状态对象通常持有对上下文Context的引用以便触发状态转换如context.state next_state状态间存在协作与生命周期关联策略模式中策略对象完全无状态依赖、不感知上下文内部结构仅通过接口接收所需数据由上下文决定何时/如何使用哪个策略。UML 结构相似但语义迥异两者都采用“接口 多个实现类 上下文持有接口引用”的结构但状态模式的 Context 通常维护当前状态的生命周期而策略模式的 Context 更像一个策略的使用者/调度者。✅ 简记口诀状态模式管“我是谁”策略模式管“我用哪个”。——状态决定行为内在驱动策略选择行为外在指定。
返回列表