重构——33以字段取代子类(Replace Subclass with Fields)

简介: 以字段取代子类(Replace Subclass with Fields):你的各个子类的唯一差别只在“返回常量数据”的函数上:修改这些函数,使他们返回超类的某个新增字段,然后销毁子类

以字段取代子类(Replace Subclass with Fields)

你的各个子类的唯一差别只在“返回常量数据”的函数上:修改这些函数,使他们返回超类的某个新增字段,然后销毁子类

一、动机

1、建立子类的目的,是为了增加新特性或变化其行为

2、子类中只有常量函数,实在没有足够的存在价值

二、做法

1、对所有子类使用Replace Constructor with Factory Method

2、如果有任何代码直接引用子类,令它改而引用超类

3、针对每个常量函数,在超类中声明一个final字段

4、为超类声明一个protected构造函数,用以初始化这些新增字段

5、新建或修改子类构造函数,使它调用超类的新增构造函数

6、编译,测试

7、在超类中实现所有常量函数,令它们返回相应的字段,然后将函数从子类中删掉

8、每删除一个常量函数,编译并测试

9、子类中所有的常量函数都被删除后,使用Inline Method将子类构造函数内联到超类的工厂函数中

10、编译,测试

11、将子类删掉

12、编译,测试

13、重复“内联构造函数,删除子类”过程,直到所有子类都被删除

14、简化条件表达式

目录
相关文章
|
5月前
|
存储
访问者模式问题之在 extractFunctions 方法中, FunctionCallExpression 类型的 Expression如何处理
访问者模式问题之在 extractFunctions 方法中, FunctionCallExpression 类型的 Expression如何处理
|
8月前
|
Java 开发者
JDK 21中的记录模式(Record Patterns):简化对象匹配与解构
本文将详细介绍JDK 21中引入的新特性——记录模式(Record Patterns)。记录模式是一种强大的语言特性,它允许开发者在switch表达式中使用简化的语法来匹配和解构记录类型(record types)。本文将解释记录模式的概念、语法、使用场景以及与传统模式匹配的区别,并通过示例代码展示记录模式在实际开发中的应用。
重构——29以数据类取代记录(Replace Record with Data Class)
以数据类取代记录(Replace Record with Data Class):你需要面对传统编程环境中的记录结构;为该记录创建一个“哑”数据对象
1567 0
重构——18自封装字段(Self Encapsulate Field)
自封装字段(Self Encapsulate Field):你直接访问一个字段,但与字段之间的耦合关系逐渐变得笨拙;为这个字段建立取值/设置函数,并且只以这些函数来访问字段
1859 0
重构——57字段上移(Pull Up Field)
字段上移(Pull Up Field):两个子类拥有相同的字段;将该字段移至超类
1639 0
重构——19以对象取代数据值(Replace Data Value with Object)
以对象取代数据值(Replace Data Value with Object):你有一个数据项,需要与其他数据和行为一起使用才有意义;将数据项变为对象
1693 0
重构——31以子类取代类型码(Replace Type Code with SubClass)
以子类取代类型码(Replace Type Code with SubClass):你有一个不可变的类型码,它会影响类的行为;以子类取代这个类型码
1597 0
重构——22以对象取代数组(Replace Array with Object)
以对象取代数组(Replace Array with Object):你有一个数组,其中的元素各自代表不同的东西;以对象替换数组。对于数组中的每个元素,以一个字段来表示
1130 0
重构——27封装字段(Encapsulate Field)
封装字段(Encapsulate Field):你的类中存在一个public字段:将它声明为private,并提供相应的访问函数
1328 0

热门文章

最新文章