Java 事件机制的使用

来源:互联网 发布:美国网络瘫痪 编辑:程序博客网 时间:2024/05/28 05:15

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 stubthis.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{@Overridepublic void doorEvent(DoorEvent event) {// TODO Auto-generated method stubif(event.getDoorState() == "open"){System.out.println("door1 opened.");}else{System.out.println("door1 closed");}}}
public class MyDoorListener2 implements DoorListener{@Overridepublic void doorEvent(DoorEvent event) {// TODO Auto-generated method stubif(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 stubDoorManager 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 closeddoor2 closed






0 0