本文共 2566 字,大约阅读时间需要 8 分钟。
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 closeddoor2 closed
转载地址:http://flsbb.baihongyu.com/