昨天我们讨论了利用“提升方法”重构将多个子类要用到的方法提升到父类中,今天我们来看和“提升方法”相反的重构---降低方法,下面是待重构的代码:
1: public abstract class Animal
2: {
3: public void Bark()
4: {
5: // code to bark
6: }
7: }
8:
9: public class Dog : Animal
10: {
11: }
12:
13: public class Cat : Animal
14: {
15: }
如代码所示,我们有一个带有Bark方法的Animal基类,还有两个实现了Animal的子类Dog和Cat,但在Cat类中我们却不需要Bark方法,只有在Dog类中需要,所以我们将Bark方法降低到Dog类中 。
另外,现在也是一个判断是否将Animal转换为接口的机会,如果重构后Animal中没有其它的方法了,就可以将Animal转化为一个接口,否则不用转换。下面是重构后的代码:
1: public abstract class Animal
2: {
3: }
4:
5: public class Dog : Animal
6: {
7: public void Bark()
8: {
9: // code to bark
10: }
11: }
12:
13: public class Cat : Animal
14: {
15: }
原文链接:http://www.lostechies.com/blogs/sean_chambers/archive/2009/08/04/refactoring-day-4-push-down-method.aspx