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

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

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

1.函数上移

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

2.字段上移

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

3.构造函数本体上移

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

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

4.函数下移

反向重构:函数上移

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

5.字段下移

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

6.以子类取代类型码

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

7.移除子类

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

8. 提取超类

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

9.折叠继承体系

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

10. 以委托取代子类

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

11.以委托取代超类

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

目录
相关文章
|
算法 Java 数据安全/隐私保护
如何使用OpenSSL工具生成根证书与应用证书
如何使用OpenSSL工具生成根证书与应用证书 一、步骤简记 [java] view plain copy   // 生成顶级CA的公钥证书和私钥文件,有效期10年(RSA 1024bits,默认)   openssl req -new -x509 -days 3650 -keyout CARoot1024.
3756 0
|
11月前
|
数据可视化 Python
使用Python进行数据可视化的初学者指南
在数据的海洋里,我们如何能够不迷失方向?通过数据可视化的力量,我们可以将复杂的数据集转化为易于理解的图形和图表。本文旨在为初学者提供一份简明的入门手册,介绍如何使用Python中的Matplotlib库来揭示数据背后的故事。我们将从基础的图表开始,逐步深入到更高级的可视化技术,确保每个步骤都清晰易懂,让初学者也能轻松上手。让我们开始绘制属于你自己的数据图谱吧!
|
数据可视化 数据挖掘 定位技术
【理论+实操】GeoDa空间自相关
【理论+实操】GeoDa空间自相关
|
人工智能 API 决策智能
swarm Agent框架入门指南:构建与编排多智能体系统的利器 | AI应用开发
Swarm是OpenAI在2024年10月12日宣布开源的一个实验性质的多智能体编排框架。其核心目标是让智能体之间的协调和执行变得更轻量级、更容易控制和测试。Swarm框架的主要特性包括轻量化、易于使用和高度可定制性,非常适合处理大量独立的功能和指令。【10月更文挑战第15天】
2331 6
|
存储 运维 Linux
和宝塔更好用的Linux 控制面板1Panel
和宝塔更好用的Linux 控制面板1Panel
410 1
|
机器学习/深度学习 测试技术 数据处理
KAN专家混合模型在高性能时间序列预测中的应用:RMoK模型架构探析与Python代码实验
Kolmogorov-Arnold网络(KAN)作为一种多层感知器(MLP)的替代方案,为深度学习领域带来新可能。尽管初期测试显示KAN在时间序列预测中的表现不佳,近期提出的可逆KAN混合模型(RMoK)显著提升了其性能。RMoK结合了Wav-KAN、JacobiKAN和TaylorKAN等多种专家层,通过门控网络动态选择最适合的专家层,从而灵活应对各种时间序列模式。实验结果显示,RMoK在多个数据集上表现出色,尤其是在长期预测任务中。未来研究将进一步探索RMoK在不同领域的应用潜力及其与其他先进技术的结合。
530 4
|
Ubuntu Linux 数据库
Linux:报错“command not found: yum”及yum和apt-get的区别
Linux:报错“command not found: yum”及yum和apt-get的区别
2073 0
Linux:报错“command not found: yum”及yum和apt-get的区别
EVE-NG的Windows客户端安装
EVE-NG提供Windows的客户端,集成了Wireshark、VNC、putty等软件,主要为完成配套EVE-NG的WEB浏览中的数据抓包等功能。 我的EVE-NG的Windows客户端安装包为EVE-NG-Win-Client-Pack.exe。
|
存储 iOS开发 UED
iOS 性能检测新方式​——AnimationHitches
iOS 性能检测新方式​——AnimationHitches
iOS 性能检测新方式​——AnimationHitches
|
缓存 关系型数据库 MySQL
业务中的字典表的MySQL实现方案
业务中的字典表的MySQL实现方案
644 0
业务中的字典表的MySQL实现方案