博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
下置类属性
阅读量:7210 次
发布时间:2019-06-29

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

相对于上一种重构方式“提升类属性”,现在是“下置类属性”,即当一个父类中的某个属性字段不是对于每一个子类都必需时,就应该将其下置到具体使用到该属性的子类中去,以避免该属性被所有子类继承下来。

重构前的代码例子:

abstract class Task{	protected String resolution;}class BugTask extends Task {	}class FeatureTask extends Task {	}

  在这个例子中,我们知道 FeatureTask 类不需要具有表明 resolution (解决方案)的类属性,它只为 BugTask 类所必需(代码中有 Bug 还不改的话会是怎样的后果?)。因此,只需要很简单地将 resolution 属性下置到子类 BugTask 中即可。 

重构后的代码:

abstract class Task{	//protected String resolution;}class BugTask extends Task {	private String resolution;}class FeatureTask extends Task {	}

 

小结:在前面这几种重构方式中,我认为都是与抽象出共性,或者是确定特殊子类的特殊行为、属性相关的。这四种重构方式,都表明了在设计时最好先分析、评判好各个类的职责(行为、方法)、个性(属性、字段),这样就能够避免在后期引起一系列麻烦的重构。

在我看来,虽然文章中说的是重构,但我更偏向于将这几种方式作为设计时必须考虑到的,而不是简单地将其遗留到重构这一阶段才进行考虑。

百度百科中关于“重构与设计”的说法:“重构与设计是互补的,程序应该是先设计,而在开始编码后,设计上的不足可以用重构来弥补。设计应该是适度的设计,而不必过度的设计。如果能很容易的通过重构来适应需求的变化,那么就不必过度的设计,当需求改变时再重构代码。”

虽然说“设计上的不足可以用重构来弥补”,但是我记得上次在写一个简单的程序时,就是因为在父类中设计了一个所有子类都可共享的属性,最后在程序准备运行观察效果时发现就是这个共享的属性带来了一系列问题。当时我觉得自己不是在重构,几乎是在重写、修改相当一部分的代码了,消耗的时间也可想而知…

本文转自 xxxx66yyyy 51CTO博客,原文链接:http://blog.51cto.com/haolloyin/344302,如需转载请自行联系原作者

你可能感兴趣的文章
Log Analysis - DataFrame
查看>>
Spring Data Solr
查看>>
页面渲染的同步和异步区别?
查看>>
MongoDB基本使用
查看>>
[转]Eclipse中远程调试Hadoop
查看>>
由一个C语言递归判断回文数的程序产生的回忆
查看>>
Linux下安装mysql5.7
查看>>
1.1.3 Getting Started_Budding Your First App_Building a Simple User Interface
查看>>
学习日记0907 GIL全局解释器锁 死锁与递归锁 信号量 Event事件 线程的queue
查看>>
linux awk函数
查看>>
性能测试
查看>>
阿里云服务器Linux CentOS安装配置(六)resin多端口配置、安装、部署
查看>>
jQuery对象与DOM对象之间的转换(转)
查看>>
asp.net跳转页面的三种方法比较
查看>>
Bzoj1076 [SCOI2008]奖励关
查看>>
JCo 指南
查看>>
git使用--pull代码时冲突
查看>>
1-3-1动态随屏幕变化而变化
查看>>
Reading papers_6(Pattern Recognition And Machine Learning一书,ing...)
查看>>
java mybatis 新增记录 与 insertSelective 保存问题
查看>>