Java中的事件机制在这里回顾和总结下。
1.事件对象
import java.util.EventObject;
public class DoorEvent extends EventObject{
/**
* Door open and close event
*/
private static final long serialVersionUID = 1L;
private String doorState = "";
public DoorEvent(Object source,String state) {
super(source);
// TODO Auto-generated constructor stub
this.doorState = state;
}
public void setDoorState(String doorstate){
this.doorState = doorstate;
}
public String getDoorState(){
return this.doorState;
}
}
2.Listener接口
import java.util.EventListener;
public interface DoorListener extends EventListener {
public void doorEvent(DoorEvent event);
}
3.具体的Listener1和Listener2
public class MyDoorListener1 implements DoorListener{
@Override
public void doorEvent(DoorEvent event) {
// TODO Auto-generated method stub
if(event.getDoorState() == "open"){
System.out.println("door1 opened.");
}else{
System.out.println("door1 closed");
}
}
}
public class MyDoorListener2 implements DoorListener{
@Override
public void doorEvent(DoorEvent event) {
// TODO Auto-generated method stub
if(event.getDoorState() == "open"){
System.out.println("door2 opened.");
}else{
System.out.println("door2 closed");
}
}
}
3.Manager角色
Manager角色负责发布事件,Listener负责监听。
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class DoorManager {
private Collection listeners;
public void addDoorListener(DoorListener listener){
if(listeners == null){
listeners = new HashSet();
}
listeners.add(listener);
}
public void removeListener(DoorListener listener){
if(listeners == null) return;
listeners.remove(listener);
}
public void fireDoorOpenEvent(){
if(listeners == null) return;
DoorEvent event = new DoorEvent(this,"open");
notifyListeners(event);
}
public void fireDoorCloseEvent(){
if(listeners == null) return;
DoorEvent event = new DoorEvent(this,"close");
notifyListeners(event);
}
private void notifyListeners(DoorEvent event) {
Iterator iter = listeners.iterator();
while (iter.hasNext()) {
DoorListener listener = (DoorListener) iter.next();
listener.doorEvent(event);
}
}
}
4.测试类
public class Hello {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
DoorManager manager = new DoorManager();
manager.addDoorListener(new MyDoorListener1());
manager.addDoorListener(new MyDoorListener2());
manager.fireDoorOpenEvent();
System.out.println("I am in.");
manager.fireDoorCloseEvent();
}
}
输出:
door1 opened.
door2 opened.
I am in.
door1 closed
door2 closed