论坛首页 Java企业应用论坛

尽量少用接口行不行

浏览 16237 次
精华帖 (4) :: 良好帖 (18) :: 新手帖 (0) :: 隐藏帖 (9)
作者 正文
   发表时间:2012-01-31   最后修改:2012-02-02
碰到一个项目,许多只有一个实例的类也定义了接口,而且这些类还经常要添加方法.结果偷懒的人就在使用到接口的地方直接一个强制转换.

比如函数中传递了IObjectManager接口的,这个接口里面原来只有一个search(String id)方法,后来实现类经常添加方法,修改的人每次改了实现后还要在添加接口定义.结果有些地方的调用就出现了这样的代码:
((IObjectManagerImpl)IObjectManager).search(obj)

问题是这样的代码还运行的挺好的,历经测试,一直延续到最新的版本.

写这样的调用确实不好.但也算事出有因.因为不当的接口使用增加了编码的工作量.

想了想自己使用接口的地方不算多,主要是:
1. 一个接口有多个实现.最常见的是定义事件监听.
2. 需要交给Spring管理的类(一般是DAO层和service层的类).
其他的地方一般先不考虑定义接口.以后有需要了,再加.

   发表时间:2012-02-01  
怎么说好呢,
0 请登录后投票
   发表时间:2012-02-01  
实现类1个,单元测试里Mock类1个
以上,常见的接口作用,所以还是得接口
0 请登录后投票
   发表时间:2012-02-01  
楼主还是很有心的 项目中确实很多这种情况 但是很少有人去管他 都是人云亦云啊
12 请登录后投票
   发表时间:2012-02-01  
接口这样用也行,太强悍了
0 请登录后投票
   发表时间:2012-02-01  
接口是个带有清晰操作语义的事物,能让分析设计人员对现实世界的概念做更好的抽象
从分析设计来看,接口是不可少的,还有抽象类的设计。
0 请登录后投票
   发表时间:2012-02-01  
楼上++1
0 请登录后投票
   发表时间:2012-02-01  
你只是考虑到一个接口的实现类上的变动。
假如换了一个api呢?
比如你现在用移动的api给客户发短信。
某个客户的产品需要联通api发短信。那个时候,接口的作用才凸显出来。
接口是必不可少的,尤其是大得范围的维护和移植。

如果你能保证你这个类永远不会产生大的切换,只是一个工具类,那就不需要接口了。直接一个对象,每次去new更方便。
12 请登录后投票
   发表时间:2012-02-01  
接口是特殊的抽象类(里面所有的方法都是公有且抽象的)
使用了接口后就可以间接地实现一些多重继承的功能。

比如
public class A implements X,Y,Z{....}
这样A的一个对象即可以当X用,也可以当Y用,也可以当Z用。
public class Test{
   private X x;
   private Y y;
   private Z z;
}


接口除了切换实现Y还有其它的作用,比如多层或多系统间的规范。比如A系统说请你给我提供x,y,z三个方法。这些方法我都要,一个不能少。至于你再加不加其它的方法我不管。
如果没有接口,可能改代码的人不小心去掉了x,y,z中的某些方法,反正自己子系统中用不到这些,这样给A系统提供服务昌就会出问题。
有了接口后就多了约束。如果你就一个系统,也不分层,全部自己维护就不用考虑这种情况了,因为你删除一个必须的方法,其它的类马上就会出错,你立刻就知道了。可是如果有分层,或者有多个子系统,而你看不到使用你代码的客户端系统情况会怎么样?或者你的代码最终打包到jar后才给别人用?在别人用之前你怎么保证你的代码没改坏?
12 请登录后投票
   发表时间:2012-02-01  
去问问c++的人纯虚类怎么用,就知道了接口该怎么用了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics