重构——61字段下移(Push Down Field)

字段下移(Push Down Field)

超类中某个字段只被部分子类用到;将这个字段移到需要它的子类中去

一、动机

只有某些子类需要超类中的一个字段

二、做法

1、在所有的子类中声明该字段

2、将该字段从超类中删除

3、编译,测试

4、将该字段从不需要它的子类中删除

5、编译,测试

时间: 2024-09-20 20:46:02

重构——61字段下移(Push Down Field)的相关文章

重构——18自封装字段(Self Encapsulate Field)

自封装字段(Self Encapsulate Field) 你直接访问一个字段,但与字段之间的耦合关系逐渐变得笨拙:为这个字段建立取值/设置函数,并且只以这些函数来访问字段 一.动机 如果你想访问超类中的一个字段,却又想在子类中将对这个字段的访问改为一个计算后的值,这就是该用Self Encapsulate Field的时候 二.做法 1.为待封装的字段建立取值/设值函数 2.找出该字段所有的引用点,将它们全部改为调用取值/设值函数 3.将该字段声明为private 4.复查,确保找出所有的引用

重构——57字段上移(Pull Up Field)

字段上移(Pull Up Field) 两个子类拥有相同的字段:将该字段移至超类 一.动机 去除重复 二.做法 1.针对待提升之字段,检查它们所有的被使用点,确认它们以同样的方式被使用 2.如果这些字段名称不同,先将它们改名,使每一个名称都和你想为超类取的名称相同 3.编译,测试 4.在超类中新建一个字段 5.移除子类中的字段 6.编译,测试 7.考虑对超类的新建字段使用Self Encapsulate Field

重构——60函数下移(Push Down Method)

函数下移(Push Down Method) 超类中的某个函数只与部分子类有关:将这个函数移到相关的子类中去 一.动机 使用Extract Subclass后可能需要它 二.做法 1.在所有的子类中声明该函数,将超类中的函数本体复制到每一个子类函数中 2.删除超类中的函数或者抽象它 3.编译,测试 4.将该函数从所有不需要它的那些子类中删除 5.编译,测试

《重构:改善既有代码的设计》—重构列表

重构列表重构:改善既有代码的设计Add Parameter(添加参数) Change Bidirectional Association to Unidirectional(将双向关联改为单向关联) Change Reference to Value(将引用对象改为值对象) Change Unidirectional Association to Bidirectional(将单向关联改为双向关联) Change Value to Reference(将值对象改为引用对象) Collapse H

代码重构(五):继承关系重构规则

陆陆续续的发表了多篇关于重构的文章了,还是那句话,重构是一个项目迭代开发中必不可少的一个阶段.其实重构伴随着你的项目的整个阶段.在前几篇关于重构的文章中我们谈到了函数的重构.类的重构.数据的重构以及条件表达式的重构,那么今天咱们就来聊聊继承关系的重构.当然还是延续前几篇博客的风格,我们在博客中的代码实例依然使用Swift语言来实现,当然还是那句话,使用什么语言无所谓,关键是看重构的场景以及重构的思想. "重构"不仅仅可以改善你既有的代码设计,还可以改变你组织代码的思路,使你的程序在设计

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

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

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

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

PHP获取mysql数据表的字段名称和详细信息的方法_php技巧

首先我们需要了解下查询MySQL数据库/表相关信息的SQL语句: 复制代码 代码如下: SHOW DATABASES                                //列出 MySQL Server 数据库. SHOW TABLES [FROM db_name]                    //列出数据库数据表. SHOW CREATE TABLES tbl_name                    //导出数据表结构. SHOW TABLE STATUS [FR

php获取mysql字段名称和其它信息的例子_php实例

首先我们需要了解下查询MySQL数据库/表相关信息的SQL语句: 复制代码 代码如下: SHOW DATABASES                                //列出 MySQL Server 数据库.SHOW TABLES [FROM db_name]                    //列出数据库数据表.SHOW CREATE TABLES tbl_name                    //导出数据表结构.SHOW TABLE STATUS [FROM