状态模式(State)
定义
允许一个对象在其内部状态改变时改变它的行为(改变了内部持有的对象)。
使用场景
主要角色
- Context 上下文
- State 状态抽象类或接口
- ConcreteState 具体状态
类图
示例代码
状态模式和策略模式的对比
- 焦点不同:
- 状态模式关注对象在不同状态下的行为变化,而策略模式关注定义一系列算法,使其可以相互替换。
- 用途不同:
- 状态模式适用于对象有多个状态,且在状态切换时有不同的行为。例如,自动售货机在有货和无货两个状态下的行为不同。
- 策略模式适用于客户端需要选择不同算法,或者同一算法有多种实现方式的情况。例如,排序算法可以有不同的实现,客户端可以选择使用不同的排序策略。
- 关系:
- 状态模式和策略模式都涉及到对象的行为可以在运行时变化。实际上,状态模式可以被看作是一种特殊形式的策略模式,其中上下文的行为受内部状态的影响。