JiveJdon Community Forums
在线276人   首页   主题总表   培训咨询   精华   查搜   注册    登陆
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 12 回复 / 1
 发表新帖子   回复该主题贴
贾飞

悄悄话
发表文章: 8
注册时间: 2005年12月28日 15:59
请问一下空接口的好处是什么?适用于什么范围啊?谢谢~ 2005年12月28日 16:01 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表
经常看到空接口 可是不知道其设计的好处 什么时候可以借鉴~ 谢谢~
mythmoon

悄悄话
发表文章: 202
注册时间: 2005年03月21日 01:09
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~ 2005年12月28日 20:52 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
空接口?接口本来就不是自己实现的啊!
banq

悄悄话
发表文章: 9312
注册时间: 2002年08月03日 17:08
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~ 2005年12月29日 09:42 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
象太极拳
blueoxygen

悄悄话
发表文章: 52
注册时间: 2005年06月26日 11:49
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~ 2005年12月29日 11:10 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
可以当作一个标识。虽然不做任何实现,但是标志了这个类的一个特点和将来可能有的行为。
比如序列化接口。
chenyongguang

悄悄话
发表文章: 11
注册时间: 2005年12月26日 09:44
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~ 2005年12月29日 15:01 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
举个具体的例子,比如在应用中我们经常要处理一些事件Event,事件可以有键盘事件KeyEvent、鼠标事件MouseEvent、文本事件TextEvent等等。很明显这些事件一般没有统一的处理方法,,那么需要可以定义相应的事件监听器Listener来处理。不同事件交给不同的事件监听器去监听(捕获)并处理,比如鼠标事件监听器定义如下:
public interface MouseListener extends EventListener {

/**
* Invoked when the mouse button has been clicked (pressed
* and released) on a component.
*/
public void mouseClicked(MouseEvent e);

/**
* Invoked when a mouse button has been pressed on a component.
*/
public void mousePressed(MouseEvent e);

/**
* Invoked when a mouse button has been released on a component.
*/
public void mouseReleased(MouseEvent e);

/**
* Invoked when the mouse enters a component.
*/
public void mouseEntered(MouseEvent e);

/**
* Invoked when the mouse exits a component.
*/
public void mouseExited(MouseEvent e);
};
键盘事件监听器定义如下:
public interface KeyListener extends EventListener {

/**
* Invoked when a key has been typed.
* See the class description for {@link KeyEvent} for a definition of
* a key typed event.
*/
public void keyTyped(KeyEvent e);

/**
* Invoked when a key has been pressed.
* See the class description for {@link KeyEvent} for a definition of
* a key pressed event.
*/
public void keyPressed(KeyEvent e);

/**
* Invoked when a key has been released.
* See the class description for {@link KeyEvent} for a definition of
* a key released event.
*/
public void keyReleased(KeyEvent e);
}
而EventListener定义如下(典型的空接口):

/**
* A tagging interface that all event listener interfaces must extend.
* @since JDK1.1
*/
public interface EventListener {
};
可见,EventListener表明它要对事件进行监听,但由于事件类型各异,没有统一的处理方式,故用空接口表明它要监听各类事件,而具体事件(比如鼠标事件MouseEvent)的监听和处理方式交给具体子类(比如鼠标事件监听器MouseEventListener)去处理。
不知这样回答是否正确,请大家指教。
贾飞

悄悄话
发表文章: 8
注册时间: 2005年12月28日 15:59
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~ 2005年12月29日 19:56 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
恩~ 谢谢大家~有点明白了~
是不是可以理解成把某种行为抽象出来
比如说:可以洗衣服,洗车,洗房子等等,他们具体的行动是不同的
但是可以把 洗”作为一个接口,把这类动作统一啊?
blueoxygen

悄悄话
发表文章: 52
注册时间: 2005年06月26日 11:49
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~ 2005年12月30日 09:20 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
不是说空接口么?
怎么又成了讨论接口了?
chenyongguang

悄悄话
发表文章: 11
注册时间: 2005年12月26日 09:44
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~ 2005年12月30日 20:35 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
定义空接口的初衷,打个比方,就像你知道自己要做某件事(比如事件监听),但自己还拿不定主意(也可以说这时候还无从下手,因为要监听的事件类型和处理方式都各不相同)。这时,空接口就相当一个占位符的作用。这样带来的另外一个好处是,拿前面的比喻来说,不管你定义了哪些事件监听器,你最后都可以找到他们最古老的根(EventListener),类的层次也就被刻画出来了,所有各种类型的监听器都被划到一个具有相同含义的种属(Catalog)EventListener下,而不是泛意义上的Object下。
chenyongguang

悄悄话
发表文章: 11
注册时间: 2005年12月26日 09:44
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~ 2005年12月30日 20:37 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
(错了几个字,sorry)
定义空接口的初衷,打个比方,就像你知道自己要做某件事(比如监听事相关类型的件),但自己还拿不出具体措施(也可以说这时候还无从下手,因为要监听的事件类型和处理方式都各不相同)。这时,空接口就相当一个占位符的作用。这样带来的另外一个好处是,拿前面的比喻来说,不管你定义了哪些事件监听器,你最后都可以找到他们最古老的根(EventListener),类的层次也就被刻画出来了,所有各种类型的监听器都被划到一个具有相同含义的种属(Catalog)EventListener下,而不是泛意义上的Object下。
贾飞

悄悄话
发表文章: 8
注册时间: 2005年12月28日 15:59
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~ 2005年12月31日 08:53 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
恩~ 谢谢~ 这可以说是对接口的进一步抽象,是吗?
whatavery

悄悄话
发表文章: 14
注册时间: 2005年11月25日 16:17
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~ 2006年01月02日 03:50 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
>>恩~ 谢谢~ 这可以说是对接口的进一步抽象,是吗?

不是.

对于一般的compiler,在编译期会对语法,词法,语意进行checking,java提供的空接口就是语意级别的。可以以下的方法验证一下^_^
[1]你使用方法但不声明空接口, 这是过不了编译期restriction的.
[2]验证不同版本处理方式(因为annotation, tiger和1.4或更低JDK版本对待空接口的区别)

你自己定义的空接口:
[1]对子接口的进行分类(instanceof)。
[2]被子接口以名称细化掉(子接口名称的友好)。
[3]作为动态的标记(是一种dynamic的solution, 以前有个同学写过一个关于dynamic query, 用的就是空接口, 找了半天那个例子, 没找到)。
[4]她还不够 用途份量 上的级别, 就和null object基本一个饭量, 只是appetizer而已, 离pattern这种dinner还有距离.

BTW: 空接口不是SUN第一个使用的。^_^

所以这不是"对接口的进一步抽象"

kind regards
MiMiEye

悄悄话
发表文章: 38
注册时间: 2005年02月21日 12:00
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~ 2006年01月03日 19:53 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
好像有个Colneable接口就是个典型的空接口
贾飞

悄悄话
发表文章: 8
注册时间: 2005年12月28日 15:59
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~ 2006年01月04日 09:06 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
恩~ 谢谢~ 我再好好研究下你的话~:)
这个主题有 12 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com
anti spam