提升方法的重构是指将方法提升到继承链的较高层次,该重构一般发生了当一个方法需要被更多的继承链中的多个实现使用时。
1: public abstract class Vehicle
2: {
3: // other methods
4: }
5:
6: public class Car : Vehicle
7: {
8: public void Turn(Direction direction)
9: {
10: // code here
11: }
12: }
13:
14: public class Motorcycle : Vehicle
15: {
16: }
17:
18: public enum Direction
19: {
20: Left,
21: Right
22: }
在上面的代码中,Turn方法只存在于Car类中,所以我们在Motorcycle类中无法使用Turn方法,如果我们想在Motorcycle类中使用Turn方法,则需要将Turn方法提升到Vehicle类中,
这样Vehicle所有的子类都可以使用Turn方法,这样做的一个缺点是我们增加了Vehicle类的复杂性。因些只有当一个方法需要被类的多个子类使用时,才考虑将方法提升到基类中。
另外面向对象的设计也不提倡过多的使用继承,而是提倡优先使用组织(composition)。下面是重构后的代码:
1: public abstract class Vehicle
2: {
3: public void Turn(Direction direction)
4: {
5: // code here
6: }
7: }
8:
9: public class Car : Vehicle
10: {
11: }
12:
13: public class Motorcycle : Vehicle
14: {
15: }
16:
17: public enum Direction
18: {
19: Left,
20: Right
21: }
原文链接:http://www.lostechies.com/blogs/sean_chambers/archive/2009/08/03/refactoring-day-3-pull-up-method.aspx