Java资源网

| JAVA基础 | 环境配置 | JDBC | 线程技术 | Socket编程 | JavaMail | JAVA与XML | 设计模式 | 技术新闻 | Java认证 | 程序人生 软件下载
| JSP&Servlet | Spring | Struts | Hibernate | JBuilder | Eclipse | WebService | EJB技术 | J2ME开发 | 应用服务器 | JXTA | Ajax
Articles search文章搜索
   关键字:
   类 别:
       
New download 最新下载
· [组件]HTML Parser 1.5
· [教程]WebSphere Studio应用教程
· [组件]JDom 1.0
· [工具]Junit3.8.1
· [教程]EJB编程及J2EE系统架构和设计
· [教程]EJB教程
· [教程]J2EE Tutorial中文版
· [教程]Java编程思想2(英文)
· [教程]java编程思想(完整版)
· [教程]Java网络编程
New articles 最新文章
· 设计移动 Web 服务
· 解析XML的时候完全忽略DTD
· 理解XML Schema XML Schema 初步
· 标签库的深入研究
· 提升JSP应用程序的七大绝招
· 如何使用JDOM对XML文件进行操作
· 处理XML字符串中特殊字符
· 利用Digester把XML转换成为Java对象
· 使用WebService 和RMI远程协作
· 使用Axis开发Web Service程序
Articles top 热门文章
· Eclipse基础--plugin插件安装(6644)
· eclipse+tomcat+lomboz的安装配置说明(4774)
· Java程序员就业前景(4584)
· Windows下JAVA环境变量的设置祥解(3788)
· Tomcat下JSP、Servlet和JavaBean环境的配置(3716)
· 使用links方式安装Eclipse插件(3698)
· 一个老程序员的心理话(3533)
· linux下jdk的安装与配置(3459)
· 初学者入门:Structs中基本配置入门(3334)
· Eclipse 运行命令行参数大全(3084)
您的位置:首页>>设计模式>>关于接口的设计
关于接口的设计
2007-04-13   来源:www.javaresearch.org  作者:未知

这是刚才和一个朋友的聊天记录,希望对大家有帮助:
佘士东 08:41:47
我设计一个接口,其中有些方法很类似,比如取得某个工作对象,有可能需要获得多个,也有可能获得其中一个,参数为工作对象的名字、名字列表。
我是用窄接口还是宽接口好,是用一个最大功能的方法还是多个重载方法好?
比如:
IService
public Worker  getWorker(String name);
public Vector<Worker> getWorkers(final Vector<String> names);
我是在接口约束这两个方法还是只约束最大的那个,使所有的方法都适配为后面这个最大方法,而在接口中去掉第一个方法 
杨中科 08:51:57
我认为还是多个重载方法好,主要是考虑方便别人使用 
  
杨中科 08:52:31
顺便说一句:为什么参数和返回值要用Vector?用List接口不更好吗? 
  
佘士东 08:53:55
如果适用者很有限,大概只有5个左右,实际上使用者也是提供适配功能,比如使用cs结构,web方式,wap方式,sms方式获得接口服务的适配模块 
佘士东 08:55:04
我的想法是使用Vector它是异步安全的,服务可能是多线程实现的,所以使用Vector返回,不知道有没有这个必要,有没有这个作用 
杨中科 08:55:12
你说的是什么意思,不太明白。你说getworker方法不是所有实现类都能实现? 
  
佘士东 08:56:35
其实这个接口是夹在实现和使用这中间的,使用者实现不同类型服务的适配,实现根据项目不同所要求的业务实现不一样,实际上这个接口是约束实现要多 
佘士东 08:58:08
如果接口方法太多,我怕如果变更会不会陷入变更里面,因为重载多了,其中很多有重复,比如参数列表,如果需要加上用户验证,那就都要加,这样所有实现都要改动一批 
杨中科 08:59:41
“我的想法是使用Vector它是异步安全的,服务可能是多线程实现的,所以使用Vector返回,不知道有没有这个必要,有没有这个作用 ”,你可以将传进来的List参数用Collections类中的syn****List方法将List搞成异步安全的,返回的时候你也可以返回Vector类型的,但是返回值要生命成List类型 
  
杨中科 09:00:14
要考虑二次开发人员的易用性,大部分人还是倾向于使用List、ArrayList这样的东西的 
  
杨中科 09:01:50
“如果接口方法太多,我怕如果变更会不会陷入变更里面,因为重载多了,其中很多有重复,比如参数列表,如果需要加上用户验证,那就都要加,这样所有实现都要改动一批 ”,还是那句话,不要陷入实现的漩涡中,你的接口是声明服务用的,不要管实现,怎么实现是实现类的事情,站在二次开发人员的角度来看你必须同时提供getworker和getworkers两个方法 
  
佘士东 09:01:49
原来如此,就是说实际上还是Vector,只不过返回值使用List接口,但是如果他直接转换成ArrayList使用会不会丢掉原来异步安全特性?因为返回值毕竟只是一个引用,可能其它地方也在用同一个引用 
杨中科 09:02:30
不可能转换为ArrayList的,否则运行的时候会抛ClassCastException 
  
佘士东 09:02:46
但是,二次开发实际上是开发实现类,而不是服务调用类 
杨中科 09:03:24
哦,也就是二次开发实际上是写一个实现了你定义的接口的插件??? 
  
佘士东 09:03:47
对,就是这个意思 
杨中科 09:04:57
那也最好提供这两个接口,这样你使用这些插件的时候也方便,你可以写一个抽象类来实现默认的getworker方法,在getworker中调用getworkers方法,这样二次开发人员一般只要实现getworkers方法就可以了 
  
佘士东 09:04:57
但是这个插件是惟一的,使用一个Factory获得实现 
佘士东 09:05:57
哈哈,豁然开朗,宽接口,加上适配抽象父类,就搞定了 
杨中科 09:06:26
接口方法是越多用起来越方便 
  
佘士东 09:07:10
我只是怕在产生变更的时候,对应的实现也要改动很多,毕竟框架才是初期 
杨中科 09:08:29
“对应的实现也要改动很多”,那就看你抽象类的实现水平的,定义接口的时候不要去想实现,只要想接口定义那些方法才够用就可以,实现和接口不能混 
  
杨中科 09:09:00
你可以用各种设计模式来保证不会发生“产生变更的时候,对应的实现也要改动很多” 
  
杨中科 09:09:11
但是接口就是接口 




  --相关文章--
· 面向对象编程,我的思想 (2007-04-13)
· 面向对象的思维方式 (2007-04-13)
· 通过Javanbsp;Swing看透MVC设计模式 (2007-04-13)
· 适配器模式(Adapternbsp;Pattern) (2007-04-13)
· 追MM与Java的23种设计模式 (2007-04-13)
· 责任链模式(Chainnbsp;ofnbsp;Responsibility) (2007-04-13)

版权所有©2005-2006 JAVA资源网 渝ICP备05007591号 虚拟主机 | 关于我们 | 联系方式 | 广告业务 | 网站地图 | 友情链接