|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-04-10
Norther 写道 实在看不出来这有什么方便的,如果一个接口有七七四十九个实现你怎么from?
请看前面的帖子,我很清楚的说明了使用场景. |
|
| 返回顶楼 | |
|
时间:2008-04-10
quaff 写道 没错,接口是依赖于实现了,但是不要用原来的interface来理解它,你可以把它们当作是两种不同的interface.Ia和Ib就没打算让其他类来实现,所以类不存在了它们俩也没存在的必要.
你的意思是说不准备有新的类,那人家把两个方法写在一起肯定有它的道理,而你的意思是说把这个类拆开来,当成两个来用,且又没有打算实现新的接口.我看还不如直接写两个类算了,你那接口和类没有什么区别. 接口是被用来实现的,而你那接口倒好像是定死了不让实现了... 我感觉就好像是这样的,Ia和Ib代表两个不同的操作,而类ab同时实现了Ia和Ib的方法,现在要类ab来分面当做Ia和Ib来完成不同的事情.类ab将Ia和Ib的不同操作装在一起,不觉得违反了什么规则吗? 要我说,干脆自己写个算了,还免得这么麻烦:) |
|
| 返回顶楼 | |
|
时间:2008-04-10
Fly_m 写道 quaff 写道 没错,接口是依赖于实现了,但是不要用原来的interface来理解它,你可以把它们当作是两种不同的interface.Ia和Ib就没打算让其他类来实现,所以类不存在了它们俩也没存在的必要.
你的意思是说不准备有新的类,那人家把两个方法写在一起肯定有它的道理,而你的意思是说把这个类拆开来,当成两个来用,且又没有打算实现新的接口.我看还不如直接写两个类算了,你那接口和类没有什么区别. 接口是被用来实现的,而你那接口倒好像是定死了不让实现了... 我感觉就好像是这样的,Ia和Ib代表两个不同的操作,而类ab同时实现了Ia和Ib的方法,现在要类ab来分面当做Ia和Ib来完成不同的事情.类ab将Ia和Ib的不同操作装在一起,不觉得违反了什么规则吗? 要我说,干脆自己写个算了,还免得这么麻烦:) 你的思维还是局限在目前interface的用处之内 |
|
| 返回顶楼 | |
|
时间:2008-04-10
quaff 写道 guyikun 写道 java接口和实现绑定死了,那要接口还有意义么?
原来怎么用接口可以照样用,这个只是增加一个新功能,把接口当作mask来用,挡住不需要暴露的方法,可以把它看作是一种配置文件. 比如我有个类有方法a,b,这个类是别的lib的不能修改,现在我只为dwr暴露a方法,只为cxf暴露b方法,我新增加两个接口就行了. 我觉得你这种需求应该用annotation之类的标记来实现可能比较好,从现有的技术来满足你的需求的角度上说。 |
|
| 返回顶楼 | |
|
时间:2008-04-10
Lucas Lee 写道 quaff 写道 guyikun 写道 java接口和实现绑定死了,那要接口还有意义么?
原来怎么用接口可以照样用,这个只是增加一个新功能,把接口当作mask来用,挡住不需要暴露的方法,可以把它看作是一种配置文件. 比如我有个类有方法a,b,这个类是别的lib的不能修改,现在我只为dwr暴露a方法,只为cxf暴露b方法,我新增加两个接口就行了. 我觉得你这种需求应该用annotation之类的标记来实现可能比较好,从现有的技术来满足你的需求的角度上说。 用annotation的话需要框架去定制并且处理,并且不比这个方法简单,现在说的不是能不能用已有的技术去实现,是开辟一个新的思路. |
|
| 返回顶楼 | |
|
时间:2008-04-10
现成 的代理模式不就可以了么?
package com.javaeye.codeutl;
public class A {
String s = null;
public A(String s) {
this.s = s;
}
public char charAt(int index) {
return s.charAt(index);
}
class B {
String s = null;
public B(String s) {
this.s = s;
}
public int indexOf(int ch) {
return s.indexOf(ch);
}
}
}
而且接口只是一种约定,只要方法签名是一样的,即使你用接口约束了, 假设你内部直接使用 Object的invoke方法,看上去没有暴露的方法实际还是暴露着的。 只有用 java.lang.reflect.Proxy代理之后,才是真的屏蔽了不想暴露的方法。 |
|
| 返回顶楼 | |
|
时间:2008-04-11
codeutil 写道 现成 的代理模式不就可以了么?
package com.javaeye.codeutl;
public class A {
String s = null;
public A(String s) {
this.s = s;
}
public char charAt(int index) {
return s.charAt(index);
}
class B {
String s = null;
public B(String s) {
this.s = s;
}
public int indexOf(int ch) {
return s.indexOf(ch);
}
}
}
而且接口只是一种约定,只要方法签名是一样的,即使你用接口约束了, 假设你内部直接使用 Object的invoke方法,看上去没有暴露的方法实际还是暴露着的。 只有用 java.lang.reflect.Proxy代理之后,才是真的屏蔽了不想暴露的方法。 1.我没说现在的java语言不能做到,只不过我认为这种方法更直观更方便 2.在反射面前private都是空气,我说的是对外暴露服务,比如dwr,cxf,我前面已经说的很清楚了可能是你没用过xfire. 再说一句,java.lang.reflect.Proxy代理也保留了target的引用,一样可以把它反射出来,然后做任何想做的事情 |
|
| 返回顶楼 | |
|
时间:2008-04-11
为什么还要用接口呢,直接定义两个类委派给实现类不就行了,facade貌似就是干这个的。
|
|
| 返回顶楼 | |
|
时间:2008-04-11
接口和实现是抽象和具体,
如果让具体自动抽象? 乱…… |
|
| 返回顶楼 | |
|
时间:2008-04-11
名词混淆了吧,与外部的接口不等同于JAVA的接口,前面那个接口范围更大,普通类也可以做为对于其他系统的接口,何必一定要让JAVA搞个implements from来把这2个名词弄的一模一样呢。
|
|
| 返回顶楼 | |









