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

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);
	}
}


你可能感兴趣的:(基于事件/监听器的模型的学习)