与继承相关的一些重构(一)

 

本问主要讲几个涉及到继承方面的重构,继承一般会涉及到抽象类,接口,我们通常把有相似Func的类提取同类项,也就是抽象出接口或者抽象类;这样做的好处不言而喻,可以方便的扩展,修改,维护子类的共有方法,属性,索引等等。使用基类不仅仅是把各个子类联系起来了,更是降低了各个子类间的耦合度,再次体现了面向接口、继承编程的思想。
1.提升方法:指将方法向继承链的上层迁移的过程。
用法场景:当子类A中的一个方法需要被多个子类调用的时候,需要把这个方法提升到基类中,而不能让其它的子类都去Call子类A中的这个方法。这样做唯一的缺点是扩充了基类的接口、增加了其复杂性,因此需谨慎使用。只有当一个以上的子类需要使用该方法时才需要进行迁移。
2.下放方法
用法场景:此重构和上面的方法正好相反,当基类中的某个方法只需要被一个或少数几个子类实现的时候,可以考虑把基类中的方法下放到适合的子类中,避免引起不必要的混淆。
3.提升属性
用法场景:和上移方法类似,这里只不过把方法改成了属性,把大多数子类需要用的属性提升到基类中。
4.下放属性
用法场景:和提升属性的方法正好相反,把只有个别子类需要用到的属性下放。
w-y: hidden;">下面为对这四种重构方法的代码演示。

  本文主要讲几个涉及到继承方面的重构,继承一般会涉及到抽象类,接口,我们通常把有相似Func的类提取同类项,也就是抽象出接口或者抽象类;这样做的好处不言而喻,可以方便的扩展,修改,维护子类的共有方法,属性,索引等等。使用基类不仅仅是把各个子类联系起来了,更是降低了各个子类间的耦合度,再次体现了面向接口、继承编程的思想。
  1.提升方法:指将方法向继承链的上层迁移的过程。

   用法场景:当子类A中的一个方法需要被多个子类调用的时候,需要把这个方法提升到基类中,而不能让其它的子类都去Call子类A中的这个方法。这样做唯一的缺点是扩充了基类的接口、增加了其复杂性,因此需谨慎使用。只有当一个以上的子类需要使用该方法时才需要进行迁移。

  2.下放方法:指将方法向继承链的下层迁移的过程。

   用法场景:此重构和上面的方法正好相反,当基类中的某个方法只需要被一个或少数几个子类实现的时候,可以考虑把基类中的方法下放到适合的子类中,避免引起不必要的混淆。

  3.提升属性:指将属性向继承链的上层迁移的过程。

   用法场景:和上移方法类似,这里只不过把方法改成了属性,把大多数子类需要用的属性提升到基类中

  4.下放属性:指将属性向继承链的下层迁移的过程。

   用法场景:和提升属性的方法正好相反,把只有个别子类需要用到的属性下放

  下面为对这四种重构方法的代码演示。

 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
public abstract class Vehicle
{
public string Driver { get ; set ;} // 提升属性:所有的交通工具都有驾驶员
public void Turn()
{
// 提升方法:所有的交通工具都可以转向
}
}
public class Car : Vehicle
{

}
public class Plane : Vehicle
{
public void Fly()
{
// 下放方法:只有飞机才可以飞
}
}
public class Ship : Vehicle
{
public string Anchor { get ; set ; } // 下放属性:只有船才有锚
}

 

  注意,在这里所有的方法和类,都可以在子类中使用new 关键字重新描述,合理的放置继承中方法,属性,字段的位置是个非常重要的重构方法,简单好用:)

转载于:https://www.cnblogs.com/flashbar/archive/2010/07/19/1780735.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值