Event (事件对象)
用于传递信息,用例代码如下
public class MyEvent {
private Object obj;
private String name;
public MyEvent(Object source, String name) {
this.obj = source;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
}
EventSource 事件源对象
事件触发的地方, 事件源中一般都会对监听器,进行注册
public class MyEventSource {
private List<MyEventListener> list = new LinkedList<>();
private String sourceName;
//注册监听器
public void registerListener(MyEventListener eventListener){
if(!list.contains(eventListener)){
list.add(eventListener);
}
}
public void removeListener(MyEventListener eventListener){
if(list.contains(eventListener)){
list.remove(eventListener);
}
}
public String getSourceName() {
return sourceName;
}
//属性改变(事件触发),通知监听器
public void setSourceName(String sourceName) {
if(this.sourceName == null && sourceName != null){
notifyAll(new MyEvent(this, sourceName));
}else if(this.sourceName != null && sourceName == null){
notifyAll(new MyEvent(this, sourceName));
}else if(sourceName != null && this.sourceName != null && !sourceName.equals(this.sourceName)){
notifyAll(new MyEvent(this, sourceName));
}
this.sourceName = sourceName;
}
/**
* 通知方法
* @param event
*/
public void notifyAll(MyEvent event){
for(MyEventListener mel : list){
//触发监听器得处理方法
mel.handle(event);
}
}
}
EventListener(事件监听器)
用与对某个事件源进行监听,并做出对应得处理
public interface MyEventListener{
void handle(MyEvent me);
}
public class MyListener implements MyEventListener{
@Override
public void handle(MyEvent me) {
// TODO Auto-generated method stub
System.out.println("事件源改变了 name属性");
MyEventSource mes = (MyEventSource) me.getObj();
System.out.println("由原来的:"+mes.getSourceName() + "——》 变为 :" + me.getName());
}
}
测试类
public class Test {
public static void main(String[] args) {
MyEventSource mes = new MyEventSource();
MyEventListener mel = new MyListener();
mes.registerListener(mel);
mes.setSourceName("key");
mes.setSourceName("tom");
}
}