博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
与继承相关的一些重构(二)
阅读量:7015 次
发布时间:2019-06-28

本文共 1672 字,大约阅读时间需要 5 分钟。

5.提取主类:提取一个基类,抽象出共有方法,比较常用的重构,这里的基类也许并不存在,需要自己新建立。

 用法场景:当有一个类中的某个方法需要经常被其他的类调用的时候,说明这个方法重用率很高,可以考虑把它抽象出来,放到一个基类中。

//重构前

publicclass Dog
{
  publicvoid EatFood()
  {
    // eat some food
  }
  publicvoid Groom()
  {
    // perform grooming
  }
}
//重构后
publicclass Animal
{
  publicvoid EatFood()
  {
    // eat some food
  }
  publicvoid Groom()
  {
    // perform grooming
  }
}
publicclass Dog : Animal
{
}

6.提取子类:将基类中的方法放到子类中,这里的子类也许并不存在,需要自己新建立。

 

 用法场景:当基类中的某些方法并不是面向所有或者大多数类的时候,需要把这些方法下放到子类中。

//重构前

publicclass Registration
{
  public NonRegistrationAction Action { get; set; }
  publicdecimal RegistrationTotal { get; set; }
  publicstring Notes { get; set; }
  publicstring Description { get; set; }
  public DateTime RegistrationDate { get; set; }
}
//重构后
publicclass Registration
{
  publicdecimal RegistrationTotal { get; set; }
  publicstring Description { get; set; }
  public DateTime RegistrationDate { get; set; }
}
publicclass NonRegistration : Registration
{
  public NonRegistrationAction Action { get; set; }
  publicstring Notes { get; set; }
}

7.合并继承:把子类合并到基类中去。

 

 用法场景:当子类只有属性定义,并且这些属性可以放置在基类中,那这个子类就是多余的,在把属性和基类合并后就可以移除了。

//重构前

publicclass Website
{
  publicstring Title { get; set; }
  publicstring Description { get; set; }
  public IEnumerable<Webpage> Pages { get; set; }
}
publicclass StudentWebsite : Website
{
  publicbool IsActive { get; set; }
}
//重构后
publicclass Website
{
  publicstring Title { get; set; }
  publicstring Description { get; set; }
  public IEnumerable<Webpage> Pages { get; set; }
  publicbool IsActive { get; set; }
}

  继承相关的重构就这几点,尝试在项目中多用用,很快就有感觉了:)

转载于:https://www.cnblogs.com/ywsoftware/archive/2013/02/05/2892648.html

你可能感兴趣的文章
win10 无法登录远程桌面的解决方法
查看>>
Linux 复制、移动覆盖文件不提示
查看>>
部署windows域 之2008 R2域控制器服务
查看>>
最近智商拙计,做做题补一下
查看>>
幻影CEO:讲述颠覆传统的SEO技巧
查看>>
简单设置windows server 2008
查看>>
Android开发学习笔记:Activity的生命周期浅析
查看>>
linux 下配置两个网卡桥接
查看>>
NAT和DR负载均衡集群简单配置
查看>>
把excel中的数据导入到数据库
查看>>
windows无法连接到打印机。键入的打印机名不正确,或者指定的打印机没有连接到服务?...
查看>>
日志管理1
查看>>
new/delete和malloc/free的区别和联系
查看>>
awk之RS、ORS、FS、OFS基础及举例
查看>>
echarts - 树图实现四个层级
查看>>
xml基础
查看>>
C# foreach
查看>>
向页面添加富文本编辑器
查看>>
java中json和字符串互转及日期转换 练习
查看>>
input(file)按钮美化
查看>>