以最低成本改进状态设计模式:新增方法后的类图变更问询
状态设计模式新增方法的最低成本类图变化
核心思路是用最小修改量实现需求,遵循开闭原则,尽量不改动已有稳定类结构,具体分三种场景:
1. 新增方法是所有状态的通用行为
- 在抽象
State基类里添加该方法的默认实现(比如空实现或通用逻辑) - 具体
State子类如果需要自定义逻辑就重写,不需要的话直接继承默认实现即可 - 类图变化:
- 抽象
State类新增一个方法节点 - 仅重写了该方法的具体子类,需要在类图里标注这个方法;未重写的子类无需额外修改
Context类完全不用改动,直接通过持有的State引用调用新方法
- 抽象
2. 新增方法只是部分状态的特有行为
- 不要修改抽象
State基类,避免影响所有子类 - 新建一个抽象子类(比如命名为
SpecialState),继承原State类并添加该新方法 - 需要该行为的具体
State子类,改为继承SpecialState并实现方法;其他子类保持原有继承关系不变 - 类图变化:
- 新增
SpecialState抽象类节点,继承原State类并包含新方法 - 对应具体子类的继承箭头从原
State指向SpecialState Context类无需修改,若需调用该方法,仅在确定当前状态为SpecialState子类时做类型转换即可
- 新增
3. 新增方法需要依赖Context的额外数据
- 尽量控制对
Context的修改范围,仅在必要时添加属性或辅助方法 - 方法核心逻辑仍放在
State体系中实现,Context仅负责传递数据或提供访问入口 - 类图变化:
- 若修改了
Context,则给Context类添加对应的属性或方法节点 State类或其子类新增方法,方法参数可包含Context引用以获取所需数据
- 若修改了
内容的提问来源于stack exchange,提问作者Leili Vazietan
相关产品推荐
相关产品推荐

