定义事件对象,必须继承EventObject
- import java.util.EventObject;
- public class DoorEvent extends EventObject {
- private String doorState = "";//表示门的状态,有“开”和“关”两种
- public DoorEvent(Object source, String doorState) {
- super(source);
- this.doorState = doorState;
- }
- public void setDoorState(String doorState) {
- this.doorState = doorState;
- }
- public String getDoorState() {
- return this.doorState;
- }
- }
定义监听接口,负责监听DoorEvent事件
- import java.util.EventListener;
- public interface DoorListener extends EventListener {
- public void doorEvent(DoorEvent event);
- }
该类为 门1监听接口的实现,做具体的开门,关门动作
- public class DoorListener1 implements DoorListener {
- public void doorEvent(DoorEvent event) {
- if(event.getDoorState()!=null&&event.getDoorState().equals("open"))
- {
- System.out.println("门1打开");
- }
- else
- {
- System.out.println("门1关闭");
- }
- }
- }
- /**
- * 该类为 门2监听接口的实现,做具体的开门,关门,以及开灯,关灯动作
- */
- package test;
- public class DoorListener2 implements DoorListener {
- public void doorEvent(DoorEvent event) {
- if(event.getDoorState()!=null&&event.getDoorState().equals("open"))
- {
- System.out.println("门2打开,同时打开走廊的灯");
- }
- else
- {
- System.out.println("门2关闭,同时关闭走廊的灯");
- }
- }
- }
事件源对象,在这里你可以把它想象成一个控制开门关门的遥控器,
- import java.util.*;
- public class DoorManager {
- private Collection listeners;
- /**
- * 添加事件
- * @param listener DoorListener
- */
- public void addDoorListener(DoorListener listener) {
- if (listeners == null) {
- listeners = new HashSet();
- }
- listeners.add(listener);
- }
- /**
- * 移除事件
- * @param listener DoorListener
- */
- public void removeDoorListener(DoorListener listener) {
- if (listeners == null)
- return;
- listeners.remove(listener);
- }
- /**
- * 触发开门事件
- */
- protected void fireWorkspaceOpened() {
- if (listeners == null)
- return;
- DoorEvent event = new DoorEvent(this, "open");
- notifyListeners(event);
- }
- /**
- * 触发关门事件
- */
- protected void fireWorkspaceClosed() {
- if (listeners == null)
- return;
- DoorEvent event = new DoorEvent(this, "close");
- notifyListeners(event);
- }
- /**
- * 通知所有的DoorListener
- */
- private void notifyListeners(DoorEvent event) {
- Iterator iter = listeners.iterator();
- while (iter.hasNext()) {
- DoorListener listener = (DoorListener) iter.next();
- listener.doorEvent(event);
- }
- }
- }