《重构2》第十二章-继承

简介: 《重构2》第十二章-继承

继承,是一个很重要的特性,后端开发中随时随地都在使用继承,这是一个强大且有用的方法,然而,用错的人也不再少数;

1.函数上移

    在开发中,同一类中的各函数逻辑有一定的关联性和同一性,不可否认有些功能是粘贴复制来的,因此,就回面临一个问题,修改了其中一个,但是其他的没有修改,从而导致了bug产生,此时,就可以使用函数上移,将重复的类从子类提取至超类;需要确定的是,函数上移至超类后,各参数可以正常使用;

2.字段上移

各子类是分别开发的,在优化重构中,发现字段/字段功能是重复的,那么就可以将字段提取至超类中;
优点一:去除重复声明;
优点二:可以讲使用此字段的逻辑也提取至超类,去除重复逻辑;

3.构造函数本体上移

首先,明白构造函数的原理:
先(通过super调用)初始化共用的数据,然后由子类完成各逻辑操作;
那么就可以将初始化数据转移至super中;

具体有没有其他优点,暂时未知,等待进一步学习;

4.函数下移

反向重构:函数上移

如果超类中,有一个函数只与众多子类中的一个/少数几个子类有关系,可以挪移至相关子类中,让逻辑更加清晰可见;
如果超类不知道哪些子类需要这个函数,就可以使用多态的方式,保留公共的行为在超类中;

5.字段下移

反向重构:字段上移
某个字段只在少数子类使用,可以将其挪移至相关子类中;超类只保留具有普遍意义及多数子类使用意义的字段;

6.以子类取代类型码

这个方法类似多态,但是书中给的例子是使用子类中的函数的swich/case方法进行完成类似多态的操作;

7.移除子类

作者使用的工厂函数取代子类,个人觉得可有可无,当一个子类负责的东西比较少后者没有独特的意义,个人认为可以不要子类;

8. 提取超类

类似函数提取,但是注意,此重构方法,一定要测试相关函数,避免超类字段数据声明、赋值出现问题;

9.折叠继承体系

这个方法其实是函数上下移动、字段上下移动等重构方法之后的结构,最后你发现一个类拥有了超类的功能,那就会自然的将一些子类清空,以上即为此优化;

10. 以委托取代子类

在需要出处理多个平行逻辑判断的时候,为了清楚的展示逻辑,可以创建一个中间类,在中间类里,进行工厂函数构建,来处理多个平行处理逻辑,同时,如果有些函数如果比较基础,也可以挪移至超类中,进行swich/case操作;在调用方使用时,只需要使用中间类就可以判断各种逻辑执行的出口,此时中间类相当于一个水龙头的不同的出水口;

11.以委托取代超类

主要用于优化子类继承超类的list,为了避免子类的修改操作影响到超类的所有数据,因此,将部分属性作为派生子类创建,然后在派生子类中修改子类的数据,而在超类中,如果想获取/修改当前属性,只需要将派生子类在超类中获取为一个属性,通过属性转发各派生子类属性的获取/修改即可

目录
相关文章
|
4月前
|
设计模式
二十三种设计模式全面解析-装饰器模式-超越继承的灵活装扮
二十三种设计模式全面解析-装饰器模式-超越继承的灵活装扮
|
5月前
|
程序员 C++
代码规范:类的继承与组合
【规则 10-1-2】若在逻辑上 B 是 A 的“一种”(a kind of ),则允许 B 继承 A 的功能和属性。例如男人(Man)是人(Human)的一种,男孩(Boy)是男人的一种。那么类 Man 可以从类 Human 派生,类 Boy 可以从类 Man 派生。
18 0
|
8月前
|
存储 安全 编译器
【巧妙继承】C++玩转继承的神级技巧
【巧妙继承】C++玩转继承的神级技巧
|
10月前
|
设计模式 Java
【Java设计模式 面向对象设计思想】五 多用组合少用继承编程
【Java设计模式 面向对象设计思想】五 多用组合少用继承编程
152 0
【Java设计模式 面向对象设计思想】五 多用组合少用继承编程
|
10月前
|
算法
《重构2》第七章-封装
《重构2》第七章-封装
74 0
|
设计模式 算法 Java
如何优雅的用策略模式,取代臃肿的 if-else 嵌套,看这篇就够了
如何优雅的用策略模式,取代臃肿的 if-else 嵌套,看这篇就够了
935 0
如何优雅的用策略模式,取代臃肿的 if-else 嵌套,看这篇就够了
|
设计模式
【设计模式】软件设计七大原则 ( 里氏替换原则 | 定义 | 定义扩展 | 引申 | 意义 | 优点 )
【设计模式】软件设计七大原则 ( 里氏替换原则 | 定义 | 定义扩展 | 引申 | 意义 | 优点 )
170 0
|
设计模式 Java
快速分清抽象类与接口 | 带你学《Java面向对象编程》之六十一
本节结合实际情景,直观地为读者列表展示了抽象类与接口在不同维度上的区别。
快速分清抽象类与接口   | 带你学《Java面向对象编程》之六十一
|
Java 数据库 数据安全/隐私保护
规则之间-方法覆写限制 | 带你学《Java面向对象编程》之四十
本节向读者介绍了覆写方法过程中的一些限制,并拓宽读者对访问权限控制符的认识,帮助读者进行有效的方法覆写。
|
算法 容器
【自然框架】——页面基类与设计模式(二) 模板模式
前篇:【自然框架】——页面基类与设计模式(一)桥接模式   桥接模式的补充:(下面的一段是桥接模式里后补充的一段,桥接模式的一个小结)   什么是交接模式?引用《大话设计模式》里的定义:   桥接模式(Bridge):将抽象部分和他的实现部分分离,使他们都可以独立的变化。
803 0