Switch Statement
症状
本来开心的想要添加或者修改现有功能突然发现代码不知道从何下手,因为可能很多处switch 或者很多 if 关键字 ,你必须要搞明白哪个分支以及改之后的影响范围以及会不会影响其它的分支。
病因
项目之初程序员往往都是如何简单如何写,在有分支逻辑的时候确实switch or if 这种方式是最快速且便捷的,但是随着程序功能的不断迭代,代码却没有跟上(一个分支可能拥有着一种对象的概念),导致后面功能又会出现新的switch,又或者switch分支的逻辑越写越多,越写越复杂.
导致的健康问题
如果想添加或者修改原有功能,由于逻辑在分支里,往往改一个地方不慎有可能会破坏其它的分支,又或者改了一个地方发现还有其它地方忘记了。这样的话无形中增加了维护成本,以及提高了BUG的发生的概率.
治疗
- 如果看到一个条件表达式,它根据类型的不同而选择不同的行为。
尝试运用 Replace Conditional with Polymorphism 让这些行为封装到自己的条件对象中
IntelliJ IDEA 练习视频
- 有个类型码,它会影响行为,但你无法通过继承的方式消除它,或者类型码的数值在对象的生命周期中发生变化。
尝试运用 Replace Type Code with State/Strategy (以状态/策略取代类型码) 让这些行为封装到自己的条件对象中
IntelliJ IDEA 练习视频
康复
当我想控制浴缸,我就直接去拧浴缸的开关了,而不需要在一个统一的控制中心中找到哪个是浴缸的开关。
什么情况不治疗
- 当Switch控制的是很简单的逻辑。
- 有些设计模式必须存在Switch的例如工厂模式(Factory),抽象工厂模式(Abstract Factory)。