1 符号和症状2 病因3 治疗4 疗效5 注意 1 符号和症状代码中有复杂的switch语句,或者一系列if语句。 2 病因较少使用switch和case是面向对象代码的标志之一。单个switch中的代码,常常会分散到程序中的多个位置。添加新的条件时,需要找出所有switch代码进行修改。经验法则:看到switch时,考虑下多态。 3 治疗 要隔离switch,将其放到正确的类中,可能需要抽取方法,然后移动方法。如果switch是基于类型代码的(比如说,根据程序的运行时环境进行switch),试试用子类替代分类代码,或者用状态/策略替代分类代码。在指定继承结构之后,用多态替代条件。如果没有很多条件分支,并且每个分支用不同的参数调用同一个方法,使用多态可能是多余的。可以将方法切分成多个更小的方法,也就是用显式方法替代参数。如果某个条件分支是空,引入空对象。 4 疗效改进的代码组织。 5 注意switch分支执行简单动作时,没必要修改代码。 工厂设计模式(工厂方法和抽象工厂)常使用switch来选择要实例化的类。