当前位置:  技术问答>java相关

关于接口与OO的讨论,请大家参与!!!

    来源: 互联网  发布时间:2015-03-22

    本文导语:  今天一个同事给我一个设计,但我与他有不同的看法,具体问题是这样的: 他的设计 接口 TableStyle 类 DefaultTableStyle 实现了 TableStyle 接口 ModifyStyle 类 CTableStyle 实现了 TableStyle,ModifyStyle 在接口TableStyle中只声明多个get方...


今天一个同事给我一个设计,但我与他有不同的看法,具体问题是这样的:

他的设计
接口 TableStyle
类 DefaultTableStyle 实现了 TableStyle
接口 ModifyStyle
类 CTableStyle 实现了 TableStyle,ModifyStyle

在接口TableStyle中只声明多个get方法,在ModifyStyle接口中只声明多个set方法。

他给我的理由是这样设计用户只需要用接口进行操作,不用直接操作类。

我不同意,我觉得其实把 ModifyStyle接口和CTableStyle类可以合并在DefaultTableStyle中,也就是在DefaultTableStyle类中实现set方法,如同swing里的TreeModel接口和DefaultTreeModel类一样的关系。

用户如果不需要修改缺省设置可以直接用new出来的DefaultTableStyle或是修改它里面的各别属性。

我的理由是可以省掉ModifyStyle和CTableStyle,结构更清楚,明了。
因为用两个类两个接口做的事用一个接口一个类就可以实现了。而且swing中有很多地方都是这样做的。


但是他的观点是他的设计更OO,更对象。

天哪?! 难道用户只与接口打交道,不与类操作是更符合OO的规范??

到底OO与接口是什么关系?在java中的接口在OO中如何体现?从字面上看他的设计的确有那么些道理。

我现在提出来,大家一起来讨论一下吧,参与者均有分。





|
我明白你的意思了。前面我可能没有完全了解你的系统。

作为我不可能从总体上了解你的系统,我想设计原则是这样的:
如果只有一些类用get,另一些类用set,没有或很少有类同时用get,或set,且set用的较少,你可以用你的设计。如果通过interface使用get,set很频繁那就可以考虑用两个接口。如果还有许多类需要同时调用get,set,那就可以考虑我的设计。如果用interface没有更多的好处(如多态),而这块又只是系统中很小的一块的话。就连interface也可以不要。毕竟没有必要仅仅为了封装get,set方法定义interface。一个系统可以有多种设计,各有各的好处,到底选哪个,这需要你综合考虑整个系统。看这块有多大,是不是设计的重点。而且有时候完全的OO,完全的面向实际,反而不好。你觉得呢?

补充一下:
你还可以看一下java api,你可以发现里面只有大的interface例如Collection,没有unmodifiableCollection,而是用Collections.unmodifiableCollection()实现的。为什么这样实际呢,我想也是为了不但通用而且简化编程,是权衡过的。编程简化和对象封装有时候是矛盾的。就看你想要什么,而牺牲什么了。


|
接口是比类更为抽像是一个类型。
使用它的目的是抽取一组对象的共性,用它一进行对这组对象的共有方法的操作。
在OO中,要使用多继承时,C++能使用多个类继承一个父类来进行,但java不支持多个类的继承,只有用接口来实现。
如两个Bat的子类,一个ABat,一个BBat他们除了是bear(兽)的子类,但都能飞,有飞的特性,而FBird是Bird的一个子类,但它也有飞的特性,把这个特性抽出来益是
Class ABat extends bear implemnts CanFly;
Class BBat extends bear implemnts CanFly;
Class FBird extends Bird implemnts CanFly;
我认为,在java中,接口仅仅是因为不直接多继承的来解决多种抽象共性的一个手段,主要是为了使程序结构清晰。去掉了C++多继承过于复杂的问题。

|
各位大侠施主,你们好!

如果接口的名字也换了得话,确实都要改了。小衲是首先假设
接口的定义是比较稳定的,不会经常修改,因为接口不包括
具体实现,所以一般来说,相对稳定一些。但确实存在连
接口都要修改的情况。

我寺般若堂中有一部武林奇书,已经流传上千年了,非常薄没有几
页纸,小衲没有看过,据说内功不够的人看了,手少阳肺经会有
阻滞之感。。。峡车穴也会每日三次的隐隐跳动。。。


不过澄观大师看过这本书!看完之后,回来也不说话,闷头就
写程序!   据他说。。。书里面。。。全都是。。。接口!!!!!
一个类都没有!!!!!

咳咳咳咳咳咳。。。嘻嘻。。。

|
总的来说,你的同事的设计结构更灵活。
你的观点更实用。
希望能综合一下.

|
面向接口编程是面向对象的基本原则。但是,正确的接口从哪里来?不是从天上掉下来的,是从现实中的类中抽象出来的。所以不顾及实际的对象,硬抽象一些似是而非的接口,就是对于接口的滥用。往往是从类到接口,再从接口回到类,如此反复数次,才能够得到真正可复用的设计。在这个设计中,考虑到Style不是Table的主要职责,可以使用Decorate模式来实现Style,如果Decorate会生成大量的细小对象的话,也可以考虑结合Flyweight。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.script接口invocable的类成员方法: getinterface定义及介绍
  • 关于LOCAL接口和REMOTE接口的同时兼顾的问题
  • java命名空间javax.lang.model.element接口typeelement的类成员方法: getinterfaces定义及介绍
  • 请问 linux 是如何调用 alsa的控制接口的??是通过控制接口名字吗?
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getmanagementspecversion定义及介绍
  • LINUX下最大支持虚接口数是多少? 如果我想配置1000个虚接口可以吗?
  • java命名空间java.beans.beancontext接口beancontextproxy的类成员方法: getbeancontextproxy定义及介绍
  • 对于操作系统的程序接口,作业接口,单内核,微内核到底有什么区别?
  • java命名空间javax.print接口uriexception的类成员方法: getreason定义及介绍
  • java的API中有没有既实现了Map接口又实现了List接口的类?
  • java命名空间javax.swing.text接口caret的类成员方法: install定义及介绍
  • 菜鸟提问:一个类实现了一个接口,除了要定义接口的所有方法外,可不可以再添加其他方法?
  • java命名空间javax.swing接口rootpanecontainer的类成员方法: getrootpane定义及介绍
  • 急,请问如何修改网络接口eth为其它名称,如网络接口为abc0, abc1,要修改哪个配置文件?
  • java命名空间javax.swing.text接口highlighter的类成员方法: install定义及介绍
  • 有人在Linux下用过1394接口的设备吗?怎么装载一个1394接口的存储设备呢?
  • java命名空间java.lang.reflect接口parameterizedtype的类成员方法: getrawtype定义及介绍
  • 请问高手:EJB中的远程接口、本地接口、HOME接口的联系与区别是什么?应用时应注意哪些问题?
  • java命名空间javax.management接口descriptorread的类成员方法: getdescriptor定义及介绍
  • C#学习笔记之接口与基于接口的工厂模型
  • java命名空间javax.lang.model.element接口typeparameterelement的类成员方法: getgenericelement定义及介绍
  • 请问为什麽在J2ee中客户端(测试时)用jndi定位enterprise bean的时候,可以把远程接口实例化?接口不是不可以生成对象的吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3