梳理并分解继承体系
1.某个继承体系同时承担两项责任:建立两个继承体系,并通过委托关系让其中一个可以调用另一个。
2.动机:混乱的继承体系是一个严重的问题,因为它会导致重复代码,还会是修改代码变得困难,因为特定问题的解决策略被分散到了整个体系。
3.做法:A.首先识别出继承体系所承担的不同责任,然后建立一个二维表格,并以坐标轴标出不同的任务;
B.判断哪一项责任更重要些,并准备将它留在当前的继承体系中。准备将另一责任移到另一个继承体系中;
C.使用EXTRACT CLASS从当前的超类中提炼出一个新类,用以表示重要性稍低的责任, 并在原超类中添加一个实例变量,用以保存新类的实例;
D.对应于原继承体系中的每个子类,创建上述新类的一个子类。在原继承体系的子类中,将前一步所添加的实例变量初始化为新建子类的实例;
E.针对原继承体系中的每个子类,使用MOVE METHOD将其中的行为搬移到与之对应的新建子类中;
F.当原继承体系中的某个子类不再有任何代码时,就将它去除;
G.重复以上步骤,直到原有继承体系中的所有子类都被处理过为止。观察新继承体系,看是否有可能对它实施其他重构手法,如Pull Up Method或Pull Up Field