IMZRH的日志

努力成为一个有用的人

导航

31天重构指南之三: 提升方法(pull up )

Posted on 2009-09-16 09:30  张荣华  阅读(534)  评论(1编辑  收藏  举报

提升方法的重构是指将方法提升到继承链的较高层次,该重构一般发生了当一个方法需要被更多的继承链中的多个实现使用时。

   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