1、最简单的情况
同一个类中,两个函数含有相同的表达式。
解决:这时候就要提出相同的代码,让这两个地方都调用这段被提炼出来的代码。
运用方法:Extract Method(提炼方法)
2、另一种常见的情况
两个互为兄弟的子类内还有相同的表达式。
解决:先提炼出重复的代码,进行封装------------Extract Method(提炼方法)
在把提炼出来的代码推入到超类内-----------Pull Up Method(函数上移)
要用这段被提炼出来的代码时,就调用父类的。
3、如果两个互为兄弟的子类内含有的代码之间只是类似。
解决:将相似和差异的代码分开,构成一个单独的函数(相似的代码)。--Extract Method(提炼方法)
这时可能就用一个模版方法模式来解决我们的问题了。---------------Form Template Method(塑造模版函数)
4、如果有些函数以不同的算法做相同的事。
解决:选择一个最清晰的函数,将其他函数的算法替换掉----Subtitute Algorithm(替换算法)
5、如果两个毫不相关的类出现重复代码。
解决:应该考虑对其中的一个类,将重复的代码提炼出来。提炼到一个独立的类。-----Extract Method(提炼方法)
在另一个类要使用这段代码的时候,调用这个新类。
问题递进:有时重复的代码所在的函数,也可能的确只应该属于该类。其他的类若要想用这段代码,就只能引用这个类了。但是你必须确定好这个共用的函数放在哪儿最合适(也就是哪个类里),放下了就不要再动了。