知识卡片
状态模式的优点与类膨胀的代价
内容
[[状态模式的定义与三个角色]]带来三点收益:结构清晰,避免switch/if-else堆积; 遵循开闭与单一职责,新增/修改状态只需增改对应子类;封装性好,状态转换逻辑在类内部, 调用方感知不到切换。代价是子类膨胀,状态越多具体状态类越多;也可用数据库状态表配合 条件判断替代。发散:用类的数量换每个类的简单和职责单一,是状态、命令、访问者模式共同 的权衡方向。
参考来源
- 位置:《设计模式之禅(第2版)》第26章《状态模式》(源文件:_epub-src/text/part0121.html)
- 结论依据:原文列出三点优点(结构清晰、遵循设计原则、封装性好)并说明缺点"只有一个缺点,子类会太多,也就是类膨胀……其实有很多方式可以解决这个状态问题,如在数据库中建立一个状态表"。
- 原始内容:避免了过多的switch...case或者if...else语句的使用……很好地体现了开闭原则和单一职责原则……状态变换放置到类的内部来实现,外部的调用不用知道类内部如何实现……子类会太多,也就是类膨胀。