察看者情势的java实现[Java编程]
本文“察看者情势的java实现[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Java事件模子
在我的前两篇介绍C#事件和拜托的blog 发表之后,大家呼应分外热烈,点击率很高,看来事件/拜托机制是很多同仁对比模糊的地方,借此东风,加上近来自己转战java,于是决意写这篇介绍java事件机制的blog.
其实,不管哪类语言的事件机制,毫无例外都逃不出三点:事件源/发送者,事件的承受者/处理者/侦听者,以及事件源向事件承受者传送的事件信息.对应在java中,事件源 (event source),事件倾听者 (event listener),事件消息称为eventobject.而在C#中,辨别是发送者(Sender),处理者(handler),事件消息则是事件参数(EventArgument).而java和c#都采取相同的呼应情势:公布者/定阅者情势(publisher/subscriber),具体来说就是:
(1)定阅者向公布者注册自己感爱好的事件;
(2)事件发生时,告诉定阅者呼应事件.
简单一句话,就是那句常说的:“Don't call me,I'll call you.”
由于之前已经对C#的事件机制举行了探究,下面,我将侧重谈谈java的事件机制,以及对二者实现机制的对比:
(一)Java事件实现机制
下面是一个自定义java事件的例子,通过这个简单的演示,你可以看到Java的事件实现机制.这里阐明一下,这个例子引自http://www.rainsts.net/article.asp?id=224,为了阐明原理,改编了原文中对匿名办法部份,并且由于这个网站的代码编辑器贫乏对java代码的支持,因此,对关键字,范例等并没有作格局显示处理.
import java.util.*;
// 定义一个近似 C# EventArgs 的类用来传送事件状况信息.
// 普通要求担当自 java.util.EventObject,且以 Event 末尾.
class ClicktEvent extends EventObject
{
public DemoBean source;
//构造函数的参数传送产闹事件的事件源
public ClickEvent(DemoBean source)
{
super(source);
this.source = source;
}
}
// 通过接口来定义事件呼应函数原型,就像c# delegate定义了呼应函数的“模板”,
// 别忘了,接口实际上就是一种“条约”,“契约”,通过这个接口中的函数签名到达对呼应函数的标准
// 普通要求担当自 java.util.EventListener,且以 Listener 末尾.
//这里以I开首定义ClickListener接口,鉴戒自.net,不符合j2ee的命名标准
interface IClickListener extends EventListener
{
void click(ClicktEvent e);
}
//事件侦听者,实现侦听者接口
public class ClickListener implements IClickListener
{
public void click(ClicktEvent e) {
System.out.println( "the clicked event happened");
}
}
// 定义演示控件类,也就是事件源
class DemoBean
{
// 用一个java.util.Vector对象来存储全部的事件监听器对象.
private Vector clicks = new Vector();
// 增添事件定阅.普通以 add( listener)方法拼写,并增添 synchronized 关键字.
public synchronized void addExampleListener(IClickListener listener)
{
clicks.add(listener);
}
// 移除事件定阅.普通以 remove( listener)方法拼写,并增添 synchronized 关键字.
public synchronized void removeExampleListener(IClickListener listener)
{
clicks.remove(listener);
}
// 触发事件.
protected void doClickEvent()
{
// 锁定,避免在触发期间有事件被定阅或移除.
synchronized (this)
{
// 成立事件状况对象.
ClicktEvent ce = new ClickEvent(this);
// 循环触发全部的事件定阅办法.
for (int i = 0; i < clicks.size(); i++)
{
IClickListener e = (IClickListener)clicks.get(i);
e.click(ce);
}
}
}
// 模拟点击操作.
public void Click()
{
doClickEvent();
}
}
//测试程序
public class Program
{
public static void main(String[] args)
{
// 成立控件.
DemoBean bean = new DemoBean();
//实例化一个事件侦听者
ClickListner testListner=new ClickListner();
// 增添事件定阅.
bean.addExampleListener (testListner);
// 模拟触发点击操作.
bean.Click();
}
}
以上是“察看者情势的java实现[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |