以字段取代子类(Replace Subclass with Fields)
你的各个子类的唯一差别只在“返回常量数据”的函数上:修改这些函数,使他们返回超类的某个新增字段,然后销毁子类
一、动机
1、建立子类的目的,是为了增加新特性或变化其行为
2、子类中只有常量函数,实在没有足够的存在价值
二、做法
1、对所有子类使用Replace Constructor with Factory Method
2、如果有任何代码直接引用子类,令它改而引用超类
3、针对每个常量函数,在超类中声明一个final字段
4、为超类声明一个protected构造函数,用以初始化这些新增字段
5、新建或修改子类构造函数,使它调用超类的新增构造函数
6、编译,测试
7、在超类中实现所有常量函数,令它们返回相应的字段,然后将函数从子类中删掉
8、每删除一个常量函数,编译并测试
9、子类中所有的常量函数都被删除后,使用Inline Method将子类构造函数内联到超类的工厂函数中
10、编译,测试
11、将子类删掉
12、编译,测试
13、重复“内联构造函数,删除子类”过程,直到所有子类都被删除
14、简化条件表达式