java的事件处理机制

java的事件模型使用的是java的观察者模式.

subject对象

package  com.my.test.event;

/*
 * Created on Nov 26, 2004 11:25:14 PM
 *
 * MyChangeEvent.java
 *
*/


import  java.util.EventObject;

/**
 * 
 * 
@author wangzj
 *
 
*/

public   class  MyEvent  extends  EventObject  {

    
private String myname;

    
/**
     * 
@param source
     
*/

    
public MyEvent(Object source) {
        
super(source);
    }


    
/*
     * @param source myname
     
*/

    
public MyEvent(Object source, String myname) {
        
super(source);
        
this.myname = myname;
    }


    
/*
     * @return String
     
*/

    
public String getMyname() {
        
return myname;
    }


}

 

观察者接口

 

package  com.my.test.event;

import  java.util.EventListener;

/**
 * 
@author violin
 *
 *  Copyright www.yz21.org 2003-2004
 
*/

public   interface  MyListener  extends  EventListener  {
 
/*
  * @param event
  
*/

 
public void MyChanged(MyEvent event);

}


 

事件运行机制

 

package  com.my.test.event;

/*
 * Created on Nov 26, 2004 11:32:01 PM
 *
 * MyClass.java
 *
*/


import  java.util.Iterator;
import  java.util.Vector;

/**
 * 
@author violin
 * 
 * Copyright www.yz21.org 2003-2004
 
*/

public   class  MyClass  {

    
private String name = "2004-9-27";

    
private static Vector myListeners = new Vector();

    
/**
     * 
     
*/

    
public MyClass() {
        
super();
    }


    
/*
     * @param myname
     
*/

    
public void testMyEvent(String myname) {
        
this.name = myname;
        notifyMyListeners();
    }


    
/*
     * @param listener add a listener;
     
*/

    
public void addMyListener(MyListener listener) {
        myListeners.add(listener);
    }


    
/*
     * @param listener remove a listener;
     
*/

    
public void removeMyListener(MyListener listener) {
        myListeners.remove(listener);
    }


    
/*
     * notify all listeners;
     
*/

    
private void notifyMyListeners() {
        MyEvent event 
= new MyEvent(MyClass.class, name);
        Iterator iterator 
= ((Vector) myListeners.clone()).iterator();

        
while (iterator.hasNext()) {
            MyListener listener 
= (MyListener) iterator.next();
            listener.MyChanged(event);
        }

    }

}

 

其实原理很简单,就是通过subject去调用观察者的方法,去触发事件方法.

此处的subject分类似乎不太合理,记不得了,大概思想是这样的了,哈哈

jsf中的ui组件的事件包括action和valuechanged事件都是使用这种模式,哈哈

只是他们多了一个标识接口FacesListener,作为actionListener和valuchagedListener的父接口!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值