以多态取代条件表达式(Replace Conditional with Polymorphism)
你手上有个条件表达式,它根据对象类型的不同而选择不同的行为;将这个条件表达式的每个分支放进一个子类内的覆写函数中,然后将原始的函数声明为抽象函数
一、动机
1、面向对象术语中,听上去最高贵的词非多态莫属
2、正因为有了多态,所以你会发现,类型码的switch语句以及基于类型名称的if-then-else语句在面向对象程序中很少出现
二、做法
1、Replace Type Code with Subclass,Replace Type Code with State/Strategy
2、如果要处理的条件表达式是一个更大函数的一部分,先Extract Method
3、如果有必要,使用Move Method将条件表达式放置到继承结构的顶端
4、任选一个子类,在其中建立一个函数,使之覆写超类中容纳条件表达式的那个函数,将与该子类相关的条件表达式分支复制到新建函数中,并对它进行适当调整
5、为了顺利进行这一步骤,你可能需要将超类中的某些private字段声明为protected
6、编译,测试
7、在超类中删掉条件表达式内被复制的分支
8、编译,测试
9、针对条件表达式的每个分支,重复上述过程,直到所有的分支都被移到子类内的函数为止
10、将超类之中容纳条件表达式的函数声明为抽象函数