package com.event.src;
import java.util.EventObject;
/**
* 事件:要想成为一个事件,这个类必须继承ExentObject
* @author winter
*/
@SuppressWarnings("serial")
public class NameChangeEvent extends EventObject {
/**
* 必须重写EventObject类的构造方法
* @param source
*/
public NameChangeEvent(NameChangeContext source) {
super(source);
}
public NameChangeContext getNameChangeContext () {
return (NameChangeContext) super.getSource();
}
}
package com.event.src;
import java.util.EventListener;
/**
* 名字改变事件监听器:继承EventListener接口
* 读完Servlet的监听器源码后,发现监听器一般是接口。
* @author winter
*
*/
public interface NameChangeListener extends EventListener {
/**
* 名字事件改变后
* @param event
*/
public void changed(NameChangeEvent event);
}
package com.event.src;
import java.util.ArrayList;
import java.util.List;
/**
* 事件源
* @author winter
*
*/
public class NameChangeContext {
private String name="";
/**
* 一个事件可以有多个事件监听器,所以这里一般用list装起事件监听器来
*/
private List<NameChangeListener> listeners=new ArrayList<NameChangeListener>();
public String getName() {
return name;
}
/**
* 当名字改变时,响应事件
* @param name
*/
public void setName(String name) {
if(!this.name.equals(name)){
this.name = name;
notifies();
}
}
/**
* 注册事件
* @param listener
*/
public void addListener(NameChangeListener listener){
listeners.add(listener);
}
/**
* 响应事件
*/
public void notifies(){
for (NameChangeListener listener : listeners) {
listener.changed(new NameChangeEvent(this));
}
}
}
package com.event.main;
import com.event.src.NameChangeContext;
import com.event.src.NameChangeEvent;
import com.event.src.NameChangeListener;
/**
* 测试
* @author winter
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
NameChangeContext context=new NameChangeContext();
context.addListener(new NameChangeListener() {
@Override
public void changed(NameChangeEvent event) {
System.out.println("名字改变啦,改成:"+event.getNameChangeContext().getName());
}
});
context.setName("刘敏");
}
}