当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

察看者情势的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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • Java语言察看者情势介绍
  • 情势实践:察看者情势与Spring
  • 察看者情势的java实现
  • Java筹划情势 - 察看者情势
  • 计划情势--察看者情势(C++)
  • <b>察看者情势(Subject/Observer)</b>
  • <b>计划情势之察看者情势与其C++通用实现(上)</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .