 |
上一主题
论坛有下面几个页面,
主页面:显示所有板块,板块里的贴子总数,回复总数,最后回帖,最后回复人等
这里除了板块名外其他的都是动态的,如果每次显示的时候都从数据库计算贴子总数,获取最后回复人等
那可..
|
|
下一主题
Tomcat的连接池算是Flyweight模式吗?
|
|
|
|
请问一下空接口的好处是什么?适用于什么范围啊?谢谢~
|
2005年12月28日 16:01
|
|
|
标签列表
|
|
|
经常看到空接口 可是不知道其设计的好处 什么时候可以借鉴~ 谢谢~
|
|
|
|
|
|
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~
|
2005年12月28日 20:52
|
|
|
|
|
|
|
|
|
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~
|
2005年12月29日 09:42
|
|
|
|
|
|
|
|
|
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~
|
2005年12月29日 11:10
|
|
|
可以当作一个标识。虽然不做任何实现,但是标志了这个类的一个特点和将来可能有的行为。 比如序列化接口。
|
|
|
|
|
|
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)去处理。 不知这样回答是否正确,请大家指教。
|
|
|
|
|
|
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~
|
2005年12月29日 19:56
|
|
|
恩~ 谢谢大家~有点明白了~ 是不是可以理解成把某种行为抽象出来 比如说:可以洗衣服,洗车,洗房子等等,他们具体的行动是不同的 但是可以把 洗”作为一个接口,把这类动作统一啊?
|
|
|
|
|
|
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~
|
2005年12月30日 09:20
|
|
|
|
|
|
|
|
|
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~
|
2005年12月30日 20:35
|
|
|
|
定义空接口的初衷,打个比方,就像你知道自己要做某件事(比如事件监听),但自己还拿不定主意(也可以说这时候还无从下手,因为要监听的事件类型和处理方式都各不相同)。这时,空接口就相当一个占位符的作用。这样带来的另外一个好处是,拿前面的比喻来说,不管你定义了哪些事件监听器,你最后都可以找到他们最古老的根(EventListener),类的层次也就被刻画出来了,所有各种类型的监听器都被划到一个具有相同含义的种属(Catalog)EventListener下,而不是泛意义上的Object下。
|
|
|
|
|
|
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~
|
2005年12月30日 20:37
|
|
|
(错了几个字,sorry) 定义空接口的初衷,打个比方,就像你知道自己要做某件事(比如监听事相关类型的件),但自己还拿不出具体措施(也可以说这时候还无从下手,因为要监听的事件类型和处理方式都各不相同)。这时,空接口就相当一个占位符的作用。这样带来的另外一个好处是,拿前面的比喻来说,不管你定义了哪些事件监听器,你最后都可以找到他们最古老的根(EventListener),类的层次也就被刻画出来了,所有各种类型的监听器都被划到一个具有相同含义的种属(Catalog)EventListener下,而不是泛意义上的Object下。
|
|
|
|
|
|
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~
|
2005年12月31日 08:53
|
|
|
|
恩~ 谢谢~ 这可以说是对接口的进一步抽象,是吗?
|
|
|
|
|
|
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
|
|
|
|
|
|
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~
|
2006年01月03日 19:53
|
|
|
|
|
|
|
|
|
Re: 请问一下空接口的好处是什么?适用于什么范围啊?谢谢~
|
2006年01月04日 09:06
|
|
|
|
|
|
|
热点TAG:
AOP
cache
缓存
DDD
EJB
集群
设计模式
Hibernate
IOC
JiveJdon
OO
RBAC
Seam
Spring
Struts
anti spam
|