重构——58函数上移(Pull Up Method)

函数上移(Pull Up Method)

有些函数,在各个子类中产生完全相同的结果;将该函数移至超类

一、动机

避免重复

二、做法

1、检查待提升函数,确定它们是否完全一致

2、函数签名不同的时候,先弄成一样的

3、在超类中新建一个函数,将某一个待提升函数的代码复制到其中,做适当的调整,然后编译

4、移除一个待提升的子类函数

5、编译,测试

6、逐一移除待提升的子类函数,直到只剩下超类中的函数为止。每次移除后都需要测试

7、观察该函数的调用者,看看是否可以改为使用超类类型的对象

时间: 2024-09-20 18:35:24

重构——58函数上移(Pull Up Method)的相关文章

重构——42函数改名(Rename Method)

函数改名(Rename Method) 函数的名称未能揭示函数的用途:修改函数名称 一.动机 1.代码首先是为人写的,然后才是为计算机写的 2.想要成为一个真正的编程高手,起名的水平至关重要 二.做法 1.检查函数签名是否被超类或者子类实现,如果是,则需要针对每份实现分别进行下列步骤 2.声明一个新函数,将它命名为你要要的新名称.将旧函数的代码复制到新函数中,并进行调整 3.编译 4.修改旧函数,令它将调用转发给新函数 5.编译,测试 6.找出旧函数所有的引用点,修改它们,令它们改而引用新函数.

重构——66塑造模板函数(Form Template Method)

塑造模板函数(Form Template Method) 1.你有一些子类,其中相应的某些函数以相同顺序执行类似的操作,但各个操作的细节上有所不同 2.将这些不同的操作细节分别放进独立函数中,并保持它们都有相同的签名,于是原函数也就变得相同了.然后将原函数上移至超类 一.动机 Template Method 二.做法 1.在各个子类中分解目标函数,使分解后的各个函数要不完全相同,要不完全不同 2.运用Pull Up Mehtod将各个子类中完全相同的函数上移至超类 3.对于那些完全不同的函数,实

重构——16引入外加函数(Introduce Foreign Method)

引入外加函数(Introduce Foreign Method) 你需要为提供服务的类增加一个函数,但你无法修改这个类:在客户端建立一个函数,并以第一参数形式传入一个服务类实例 一.动机 1.服务类不能提供一项新服务,你又不能修改源码 2.如果需要大量的外加函数,就Introduce Local Extension 3.外加函数是权宜之计 二.做法 1.在客户端类建立一个函数,用来提供你需要的功能,这个函数不应该调用客户端类的任何特性.如果他需要一个值,把该值当做参数传给它 2.以服务类实例作为

重构——51移除设值函数(Remove Setting Method)

移除设值函数(Remove Setting Method) 类中的某个字段应该在对象创建时被设值,然后就不再改变:去掉该字段的所有设值函数 一.动机 不希望对象被改变,就不要提供设值函数,同时final之 二.做法 1.检查设值函数被使用的情况,看它是否只被构造函数调用,或者被构造函数所调用的另一个函数调用 2.修改构造函数,使其直接访问设值函数所针对的那个变量 3.编译,测试 4.移除这个设值函数,将它所针对的字段设置为final 5.编译,测试

重构——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.编译,测试

代码重构(一):函数重构规则

重构是项目做到一定程度后必然要做的事情.代码重构,可以改善既有的代码设计,增强既有工程的可扩充.可维护性.随着项目需求的不断迭代,需求的不断更新,我们在项目中所写的代码也在时时刻刻的在变化之中.在一次新的需求中,你添加了某些功能模块,但这些功能模块有可能在下一次需求中不在适用.或者你因为需求迭代与变更,使你原有的方法或者类变得臃肿,以及各个模块或者层次之间耦合度增加.此时,你要考虑重构了.   重构,在<重构,改善既有代码的设计>这本经典的书中给出了定义,大概就是:在不改变代码对外的表现的情况

PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数_php技巧

思维导图 点击下图,可以看大图. 介绍 我把我比较喜欢的和比较关注的地方写下来和大家分享.上次我写了篇<php 跟老大的对话>.还是有很多疑问,这书帮了我不少的忙. 如果你比较繁忙,或者懒得看文字,建议你直接看截图,也会有很大的收获的.你可以通过比较截图中的代码就能知道孰优孰劣了. 代码部分我为什么用图呢?因为我经常用手机看代码,博客园的代码在手机里乱七八糟的,还是看图比较舒服. 专业术语 我们毕竟是用英文字母编码,所以用一些英语单词,更能显示出我们的专业性.以下的英文单词,你如果掌握了,与其

《重构与模式(修订版)》目录—导读

版权声明 重构与模式(修订版) Authorized translation from the English language edition, entitled: Refactoring to Patterns, 978-0-321-21335-8 by Joshua Kerievsky, published by Pearson Education, Inc., publishing as Addison- Wesley Professional, Copyright 2005 Pears