重构第17天提取父类(Extract SuperClass)

今天的重构来自 Martin Fowlerhttp://refactoring.com/catalog/extractSuperclass.html

理解本文中的“提取父类”是指类中有一些字段或方法,你想把它们提取到父类中以便同一继承层次的其它类也可以访问他们,这个和之前的很多重构有异曲同工之处。

详解:看代码:

重构前代码:

 1   public class Dog
 2     {
 3         public void EatFood()
 4         {
 5             // eat some food
 6         }
 7  
 8 
 9         public void Groom()
10         {
11             // perform grooming
12         }
13     }

Dog 类中的EatFood和Groom有可能被其他类用到,因为他们都是动物的一些公有性质,所以这个时候我们就会考虑对它进行提炼。

重构后代码:

 1  public class Animal
 2     {
 3         public void EatFood()
 4         {
 5             // eat some food
 6         }
 7 
 8         public void Groom()
 9         {
10             // perform grooming
11         }
12     }
13 
14     public class Dog : Animal
15     {
16     }

这个重构是典型的继承用法,很多程序员都会选择这样做,但是要注意正确的使用,不要造成过度使用了继承,如果过度使用了,请考虑用接口、组合和聚合来实现。

原文地址:https://www.cnblogs.com/yplong/p/5373012.html