为什么Java中承当大都是有害的[Java编程]
本文“为什么Java中承当大都是有害的[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
大大都好的计划者象躲避瘟疫一样来避免利用实现担当(extends 关系).实际上80%的代码应当完好用interfaces写,而不是通过extends.“Java计划情势”一书具体阐述了怎样用接口担当替换实现担当.这篇文章描写计划者为什么会这么作.
Extends是有害的;大概关于Charles Manson这个级别的不是,但是充足糟糕的它应当在任何大概的时刻被避开.“JAVA计划情势”一书花了很大的部份谈论用interface担当替换实现担当.
好的计划者在他的代码中,大部份用interface,而不是具体的基类.本文谈论为什么计划者会这样挑选,并且也介绍一些基于interface的编程底子.
接口(Interface)和类(Class)?
一次,我参与一个Java用户组的会议.在会议中,Jams Gosling(Java之父)做发动人发言.在那令人难忘的Q&A部份中,有人问他:“假如你重新构造Java,你想改变什么?”.“我想丢弃classes”他答复.在笑声停歇后,它注释说,真正的问题不是由于class本身,而是实现担当(extends) 关系.接口担当(implements关系)是更好的.你应当尽大概的避免实现担当.
失去了机动性
为什么你应当避免实现担当呢?第一个问题是明确的利用具体类名将你固定到特定的实现,给底层的改变增添了不必要的艰难.
在当前的矫捷编程办法中,核心是并行的计划和开辟的概念.在你具体计划程序前,你开始编程.这个技术差别于传统办法的情势----传统的方法是计划应当在编码开始前完成----但是很多成功的项目已经证明你可以更快速的开辟高质量代码,相关于传统的循序渐进的办法.但是在并行开辟的核心是主张机动性.你不得不以某一种方法写你的代码以至于最新发现的需求可以尽大概没有痛楚的归并到已有的代码中.
胜于实现你大概需求的特点,你只需实现你明确需求的特点,并且适度的对改变的包涵.假如你没有这种机动,并行的开辟,那简直不大概.
关于Inteface的编程是机动构造的核心.为了阐明为什么,让我们看一下当利用它们的时刻,会发生什么.考虑下面的代码:
f()
{
LinkedList list = new LinkedList();
//...
g( list );
}
g( LinkedList list )
{
list.add( ... );
g2( list )
}
假定一个关于快速查询的需求被提出,以至于这个LinkedList不可以办理.你需求用HashSet来替换它.在已有代码中,改变不可以部分化,因为你不但仅需求改正f()也需求改正g()(它带有LinkedList参数),并且还有g()把列表传送给的任何代码.象下面这样重写代码:
f()
{
Collection list = new LinkedList();
//...
g( list );
}
g( Collection list )
{
list.add( ... );
g2( list )
}
这样改正Linked list成hash,大概只是简单的用new HashSet()替换new LinkedList().就这样.没有其他的需求改正的地方.
作为另一个例子,对比下面两段代码:
f()
{
Collection c = new HashSet();
//...
g( c );
}
g( Collection c )
{
for( Iterator i = c.iterator(); i.hasNext() )
do_something_with( i.next() );
}
和
f2()
{
Collection c = new HashSet();
//...
g2( c.iterator() );
}
g2( Iterator i )
{
while( i.hasNext() )
do_something_with( i.next() );
}
g2()办法目前可以遍历Collection的派生,就像你可以从Map中得到的键值对.事实上,你可以写iterator,它产生数据,替换遍历一个Collection.你可以写iterator,它从测试的框架大概文件中得到信息.这会有宏大的机动性.
以上是“为什么Java中承当大都是有害的[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |