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

塑造模板函数(Form Template Method)

1、你有一些子类,其中相应的某些函数以相同顺序执行类似的操作,但各个操作的细节上有所不同

2、将这些不同的操作细节分别放进独立函数中,并保持它们都有相同的签名,于是原函数也就变得相同了。然后将原函数上移至超类

一、动机

Template Method

二、做法

1、在各个子类中分解目标函数,使分解后的各个函数要不完全相同,要不完全不同

2、运用Pull Up Mehtod将各个子类中完全相同的函数上移至超类

3、对于那些完全不同的函数,实施Rename Method,使这些函数的签名完全相同

4、修改上述所有签名后,编译并测试

5、运用Pull Up Method将所有原函数逐一上移至超类。在超类中将那些代表各种不同操作的函数定义为抽象函数

6、编译,测试

7、移除其它子类中的原函数,每删除一个,编译并测试

时间: 2024-08-22 08:01:00

重构——66塑造模板函数(Form Template Method)的相关文章

重构——2内联函数(Inline Method)

内联函数(Inline Method) 一个函数本体与名称同样清楚易懂,在函数调用点插入函数本体,然后移除该函数. 一.动机 1.非必要的间接性总让人不舒服 2.把组织不合理的一群函数重新组织 3.并不是所有的间接层都有价值,委托太多,会让人晕头转向 二.做法 1.检查函数,确定它不具多态性 2.找出这个函数所有的被调用点 3.将这个函数所有的调用点都替换为函数本体 4.编译,测试 5.删除该函数的定义

重构——10搬移函数(Move Method)

搬移函数(Move Method) 你的程序中,有个函数与其所驻类之外的另一个类进行更多的交流:调用后者,或者被后者调用.在该函数最常引用的类中建立一个有着类似行为的新函数.将就函数变成一个单纯的委托函数,或是将旧函数完全移除 一.动机 减少类之间的耦合,是系统中的类更简单,更干净利落的完成系统交付的任务 二.做法 1.检查源类中被原函数所使用的一切特性,考虑它们是否也应该被搬移.考虑是否要将使用相同特性的函数一并搬移 2.检查源类的超类和子类,看看是否有该函数的其他声明 3.在目标类中声明这个

C++中函数模板定制(function template specialization) 详解

函数模板定制可以解决特定的模板参数, 需要特定的函数方法去实现; 注意函数模板定制是实例化模板, 而不是模板的重载; 有非模板函数(nontemplate function)存在时, 当匹配度相同时, 优先使用非模板函数; 如比较(compare)函数, 比较字符串(char*)类型, 不能通过判断地址去比较, 应该使用strcmp()函数, 需要定制函数模板; 函数模板定制需要使用 "template<>", 空的尖括号表明 提供的模板实参支持原版本的所有模板形参; 代码

设计模式重构应用---Template Method模式

先简单介绍Template Method模式的内容和应用场景. Template Method模式也叫模板方法模式,它把具有特定步骤算法中的某些必要的处理委让给抽象方法 ,通过子类继承对抽象方法的不同实现改变整个算法的行为. 在作为抽象类的父类里,定义了一个具有固定算法并可以细分为多个步骤的模板方法(public), Template Method模式把这些可以被细分的可变步骤抽象为可以被子类重载的抽象方法(protected abstract),并通过在子类中的重载(重新定义),做到无需改变模

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

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

重构——8以函数对象取代函数(Replace Method with Method Object)

以函数对象取代函数(Replace Method with Method Object) 有一个大型函数,其中对局部变量的使用使你无法采用Extract Method.将这个函数放进一个单独的对象里中,如此一来局部变量就成了对象内的字段,然后你就可以在同一个对象中将这个大型函数分解为多个小型函数 一.动机 1.小函数优美动人,只要将相对独立的代码从大型函数中提炼出来,就可以大大提高代码的可读性 2.局部变量的存在会增加函数分解难度.如果一个函数之中局部变量泛滥成灾,那么想分解这个函数是非常困难的

重构——52隐藏函数(Hide Method)

隐藏函数(Hide Method) 有一个函数,从来没有被其它任何类用到:将这个函数改为private 一.动机 提高函数可见度容易,降低稍微困难一些 二.做法 1.经常检查有没有可能降低某个函数的可见度 2.尽可能降低所有函数的可见度 3.没完成一组函数的隐藏之后,编译并测试

JUnit源码分析 (三)——Template Method模式

在JUnit执行测试时,我们经常需要初始化一些环境供测试代码使用,比如数据库连接.mock对象等等,这些初始化代码应当在每一个测试之前执行并在测试方法运行后清理.在JUnit里面就是相应的setUp和tearDown方法.如果没有这两个方法,那么我们要在每个测试方法的代码内写上一大堆重复的初始化和清理代码,这是多么愚蠢的做法.那么JUnit是怎么让setUp和tearDown在测试执行前后被调用的呢?     如果你查看下TestCase方法,你会发现TestCase和TestSuite的run

第13章 模版方法模式(Template Method)

原文  第13章 模版方法模式(Template Method) 模板模式     模板模式 举例:模拟下数据库的update方法,先删除在插入.   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47     abstract class SqlManage     {