改善代码设计 —— 处理概括关系(Dealing with Generalization)
1. Pull Up Field (提升值域)
解释:
如果发现每个子类都拥有相同的某个值域, 那么使用 Pull Up Field 将这个值域提升到父类中去.
冲动前:
冲动后:
2. Pull Up Method (提升函数)
解释:
如果每个子类都有相同的某个函数, 这个函数做同样的事情, 而且结果也相同, 那么使用 Pull Up Method 将这个函数提升到父类中去.
冲动前:
冲动后:
3. Pull Up Constructor Body (提升构造函数)
解释:
特别要注意每个子类中重复的代码, 如果可能的话尽量将它们提炼成方法并搬到父类中去. 对于子类的构造函数, 我们需要找出相同的部分, 用这些相同的部分组成父类的构造函数.
如下面的例子, 如果不光 Salesman, 还有 Engineer 等等类别的员工在构造他们的时候都需要 name 和 level 属性, 可以考虑使用 Pull Up Constructor Body 将设置这两个属性提升到父类的构造函数中去.
冲动前:
02 |
public string Name { get ; set ; } |
03 |
public int Level { get ; set ; } |
06 |
class Salesman : Employee |
08 |
public string Hobby { get ; set ; } |
10 |
public Salesman( string name, int level, string hobby) |
冲动后: