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

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

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

1.函数上移

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

2.字段上移

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

3.构造函数本体上移

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

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

4.函数下移

反向重构:函数上移

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

5.字段下移

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

6.以子类取代类型码

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

7.移除子类

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

8. 提取超类

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

9.折叠继承体系

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

10. 以委托取代子类

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

11.以委托取代超类

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

目录
相关文章
|
设计模式 算法 Java
设计模式第十五讲:重构 - 改善既有代码的设计(下)
设计模式第十五讲:重构 - 改善既有代码的设计
293 0
|
Java
面向对象思想(3)之方法1
面向对象思想(3)之方法1
68 0
|
设计模式 Java 测试技术
设计模式第十五讲:重构 - 改善既有代码的设计(上)
设计模式第十五讲:重构 - 改善既有代码的设计
335 0
|
存储 安全 编译器
【巧妙继承】C++玩转继承的神级技巧
【巧妙继承】C++玩转继承的神级技巧
|
设计模式 Java
【Java设计模式 面向对象设计思想】五 多用组合少用继承编程
【Java设计模式 面向对象设计思想】五 多用组合少用继承编程
246 0
【Java设计模式 面向对象设计思想】五 多用组合少用继承编程
【C#本质论 八】类-从设计的角度去认知(多态)
【C#本质论 八】类-从设计的角度去认知(多态)
69 0
|
算法
《重构2》第七章-封装
《重构2》第七章-封装
113 0
|
领域建模
迪米特法则与重构
迪米特法则与重构
迪米特法则与重构
|
设计模式 Java
【Java设计模式】今天终于弄懂了依赖倒转原则和依赖关系传递的三种方式(代码详解)
【Java设计模式】今天终于弄懂了依赖倒转原则和依赖关系传递的三种方式(代码详解)
【Java设计模式】今天终于弄懂了依赖倒转原则和依赖关系传递的三种方式(代码详解)
|
设计模式 Java 数据安全/隐私保护