继承,是一个很重要的特性,后端开发中随时随地都在使用继承,这是一个强大且有用的方法,然而,用错的人也不再少数;
1.函数上移
在开发中,同一类中的各函数逻辑有一定的关联性和同一性,不可否认有些功能是粘贴复制来的,因此,就回面临一个问题,修改了其中一个,但是其他的没有修改,从而导致了bug产生,此时,就可以使用函数上移,将重复的类从子类提取至超类;需要确定的是,函数上移至超类后,各参数可以正常使用;
2.字段上移
各子类是分别开发的,在优化重构中,发现字段/字段功能是重复的,那么就可以将字段提取至超类中;
优点一:去除重复声明;
优点二:可以讲使用此字段的逻辑也提取至超类,去除重复逻辑;
3.构造函数本体上移
首先,明白构造函数的原理:
先(通过super调用)初始化共用的数据,然后由子类完成各逻辑操作;
那么就可以将初始化数据转移至super中;
4.函数下移
反向重构:函数上移
如果超类中,有一个函数只与众多子类中的一个/少数几个子类有关系,可以挪移至相关子类中,让逻辑更加清晰可见;
如果超类不知道哪些子类需要这个函数,就可以使用多态的方式,保留公共的行为在超类中;
5.字段下移
反向重构:字段上移
某个字段只在少数子类使用,可以将其挪移至相关子类中;超类只保留具有普遍意义及多数子类使用意义的字段;
6.以子类取代类型码
这个方法类似多态,但是书中给的例子是使用子类中的函数的swich/case方法进行完成类似多态的操作;
7.移除子类
作者使用的工厂函数取代子类,个人觉得可有可无,当一个子类负责的东西比较少后者没有独特的意义,个人认为可以不要子类;
8. 提取超类
类似函数提取,但是注意,此重构方法,一定要测试相关函数,避免超类字段数据声明、赋值出现问题;
9.折叠继承体系
这个方法其实是函数上下移动、字段上下移动等重构方法之后的结构,最后你发现一个类拥有了超类的功能,那就会自然的将一些子类清空,以上即为此优化;
10. 以委托取代子类
在需要出处理多个平行逻辑判断的时候,为了清楚的展示逻辑,可以创建一个中间类,在中间类里,进行工厂函数构建,来处理多个平行处理逻辑,同时,如果有些函数如果比较基础,也可以挪移至超类中,进行swich/case操作;在调用方使用时,只需要使用中间类就可以判断各种逻辑执行的出口,此时中间类相当于一个水龙头的不同的出水口;
11.以委托取代超类
主要用于优化子类继承超类的list,为了避免子类的修改操作影响到超类的所有数据,因此,将部分属性作为派生子类创建,然后在派生子类中修改子类的数据,而在超类中,如果想获取/修改当前属性,只需要将派生子类在超类中获取为一个属性,通过属性转发各派生子类属性的获取/修改即可