您的位置:首页 > 其它

基于事件/监听器的模型的学习

2011-11-07 00:00 302 查看
package com.lan.u;

import java.util.Date;
import java.util.EventListener;
import java.util.EventObject;
import java.util.Vector;

public class Demo {
// test
public static void main(String[] args) {
MyEventSource es = new MyEventSource();
es.setOnClickListener(new MyEventListener() {

@Override
public void onClick(MyEventObject e) {
System.out.println("事件源名称:" + e.getName());
System.out.println(e.getMsg());
}

});

es.doClick();
}
}

/**
*
* @author lanshon Define an event state Object(定义事件状态对象类)
*
*/

class MyEventObject extends EventObject {
private static final long serialVersionUID = 1L;

private Object source;

public String getName() {
return ((MyEventSource) source).getName();
}

public MyEventObject(Object source) {
super(source);
this.source = source;
}

// 获得事件状态对象的信息
public String getMsg() {
return "Now,the time is " + new Date().toString();
}
}

/**
*
* @author lanshon Define a event listener interface
*/
interface MyEventListener extends EventListener {
void onClick(MyEventObject e);
}

/**
*
* @author lanshon 模拟事件源
*/
class MyEventSource {
// 事件源名称
private String name = "OnClickSource";
// 存放监听器
private Vector<MyEventListener> v = new Vector<MyEventListener>();

MyEventSource() {
}

MyEventSource(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

// register a 监听器,应该添加synchronized 关键字
public void setOnClickListener(MyEventListener e) {
if (!v.contains(e)) {
v.add(e);
}
}

// remove a Listener,应该添加synchronized 关键字
public void removeOnClickListener(MyEventListener e) {
if (v.contains(e)) {
v.remove(e);
}
}

protected void notifyEvent(MyEventObject eo) {
for (MyEventListener e : v) {
e.onClick(eo);
}
}

// 模拟点击事件
public void doClick() {
MyEventObject eo = new MyEventObject(this);
notifyEvent(eo);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: