重构——72提炼继承体系(Extract Hierarchy)

提炼继承体系(Extract Hierarchy)

你有某个类做了太多工作,其中一部分工作以大量条件表达式完成

建立继承体系,以一个子类表示一种特殊情况

动机

渐进式设计

时间: 2024-09-20 05:56:44

重构——72提炼继承体系(Extract Hierarchy)的相关文章

重构——65折叠继承体系(Collapse Hierarchy)

折叠继承体系(Collapse Hierarchy) 超类和子类之间无太大区别:将它们合为一体 一.动机 1.继承体系很容易变得过分复杂 2.重构了继承体系后,有些类没有用了,需要把子类和超类合并起来 二.做法 1.选择想要移除的类:是超类还是子类 2.Pull Up Field,Pull Up Method或者 Push Down Method, Push Down Field 3.每次移动后,编译并测试 4.调整即将被移除的那个类的所有引用点,令它们改而引用合并后留下的类.这个动作将会影响变

重构——1提炼函数(Extract Method)

提炼函数(Extract Method) 你有一段代码可以被组织在一起并独立出来,将这段代码放进一个独立的函数中,并让函数名称解释该函数的用途. 一.动机 1.每个函数的粒度都小,那么被复用的几率就大 2.函数的长度不是问题,关键在于函数名称和函数本体之间的语义距离 3.使高层函数读起来向一系列注释 4.如果函数都是细粒度,那么函数覆盖也会更容易些 二.做法 1.创建函数,名字要起好 2.转移代码 3.检查提炼出的代码是否引用了作用域限于原函数的变量(临时变量和源函数参数) 4.检查是否有任何的

重构——12提炼类(Extract Class)

提炼类(Extract Class) 并发和事务的风险:某个类做了两个类做的事:建立一个新类,将相关的字段和函数从旧类搬移到新类 一.动机 1.让类的抽象更清楚,让类的责任更明确 2.如果某些数据和函数总是一起出现,某些数据经常同时变化甚至彼此相依,这就表示你应该将它们分离出去 3.子类化的时候你发现某些特性需要以一种方式来子类化,另外一些特性需要以另一种方式子类化,这就意味着你需要分解原来的类 二.做法 1.决定如何分解类所负的责任 2.建立一个新类,用以表现从旧类分离出来的责任 3.建立从"

重构——62提炼子类(Extract Subclass)

提炼子类(Extract Subclass) 类中的某些特性只被某些实例用到:新建一个子类,将上面所说的那一部分特性移到子类中 一.动机 你发现类中的某些行为只被一部分实例用到,其他实例不需要它们 二.做法 1.为源类定义一个新的子类 2.为这个新的子类提供构造函数 3.找出调用超类构造函数的所有地点.如果它们需要的是新建的子类,令它们改而调用新的构造函数 4.逐一使用Push Down Method和Push Down Field将源类特性移到子类去 5.Replace Conditional

重构——63提炼超类(Extract Superclass)

提炼超类(Extract Superclass) 两个类有相似特性:为这两个类建立一个超类,将相同的特性搬移到超类 一.动机 减少重复代码 二.做法 1.为原本的类新建一个空白的抽象超类 2.运用Pull Up Field,Pull Up Mehtod,Pull Up Constructor Body逐一将子类的共同元素上移到超类 3.每次上移后,编译并测试 4.检查留在子类中的函数,Extract Method,Pull Up Method,也许可以Form Template Method 5

重构——64提炼接口(Extract Interface)

提炼接口(Extract Interface) 若干客户使用类接口中的同一子集,或者两个类的接口有部分相同:将相同的子类提炼到一个独立接口中 一.动机 1.接口对于java程序的设计方式有着巨大的影响 2.如果某个类在不同环境下扮演截然不同的角色,使用接口就是个好主意 二.做法 1.新建一个接口 2.在接口中声明待提炼类的共通操作 3.让相关的类实现上述接口 4.调整客户端的类型声明,令其使用该接口

实例解析继承体系重构及ORM映射

本文以双鱼座同学的再说继承关系一文中提到的一组三元继承关联关系为基础. 首先,分别实现本人的ORM中的继承关系映射全解一文中提到的三种实体继承体系到关系数据库的映射方案实例. 接着,使用接口分离以上继承体系中的实体类中的相同概念,对该继承体系进行重构,并同样给出对重构后的继承体系的三种到关系数据库的映射方案实例. 全部实例代码基于NBear的接口式实体定义方式实现. 1. 背景 首先,给出双鱼座同学原文中的三元继承关联关系的等价接口定义.见下图1: 2. 对图1-1的ORM映射 2.1 单表继承

JBuilder2005实现重构之类继承体系间

在JBuilder中通过重构将值域.方法在类的继承体系中上推下移,是非常容易的操作.这了说明这种重构功能,我们先来看下面的类继承体系: 图15 类的继承类图 Animal类是Cat和Horse和父类,Animal中包含了两个值域和一个方法.可以将Animal中的值域有选择地下移到某个子类中.此外,还可以为Animal提炼超类和接口. 1.搬迁方法 打开Animal.java并将光标定位到howl()方法处,通过Ctrl+Shift+R->Push Down Method调出下移方法对话框: 图1

重构——69梳理并分解继承体系(Tease Apart Inheritance)

梳理并分解继承体系(Tease Apart Inheritance) 某个继承体系同时承担两项责任:建立两个继承体系,并通过委托关系让其中一个可以调用另一个 动机 1.如果继承体系中的某一个特定层级上的所有类,其子类名称都是以相同的形容词 2.开始,那么这个体系就很可能承担着两项不同的责任