1 import java.util.ArrayList; 2 import java.util.EventListener; 3 import java.util.EventObject; 4 import java.util.List; 5 6 /** 7 * 测试自定义事件 8 * @author Administrator 9 * 10 */ 11 public class EventTest { 12 13 /** 14 * 自定义的一个事件对象 15 * @author Administrator 16 * 17 */ 18 static class MyEvent extends EventObject { 19 20 private String eventName; 21 22 23 public MyEvent(String eventName) { 24 super(eventName); 25 this.eventName = eventName; 26 } 27 } 28 29 30 /** 31 * 自定义的事件的监听器 32 * @author Administrator 33 * 34 */ 35 static class MyEventListenor implements EventListener { 36 37 public String fireEvent(EventObject event ) { 38 39 String result = ""; 40 41 doHanndler(event); 42 43 return result; 44 } 45 46 private void doHanndler(EventObject event) { 47 System.out.println(event.toString()); 48 } 49 } 50 51 52 /** 53 * 自定义的事件源 54 * @author Administrator 55 * 56 */ 57 static class MySysUI { 58 59 private String name; 60 61 /*事件监听器**/ 62 private List<EventListener> listerors = new ArrayList<EventListener>(); 63 64 public MySysUI(String name ) { 65 this.name = name; 66 } 67 68 /** 69 * 添加事件监听器 70 * @param listener 71 */ 72 public void addEventListeror(EventListener listener) { 73 listerors.add(listener); 74 } 75 76 /** 77 * 触发业务事件 78 * @param params 79 */ 80 private void fireEvent(String params) { 81 System.out.println("fireEvent"); 82 eventNotify(params); 83 } 84 85 private void eventNotify(String params) { 86 for (EventListener eventListener : listerors) { 87 MyEventListenor eventListenerOther = (MyEventListenor)eventListener; 88 89 EventObject event = new EventObject(params); 90 91 eventListenerOther.fireEvent(event ); 92 } 93 } 94 95 /** 96 * 业务处理,事件触发对用户来说,无所谓触发什么事件,他们只需完成业务自己的业务即可,里面触发时间业务事件 97 * @param prams 98 */ 99 public void doService(String... prams) { 100 101 //用户处理自己该做的业务 doDealService(); 102 103 fireEvent("触发doService业务事件"); 104 105 } 106 107 } 108 109 /** 110 * 入口程序 111 * @param args 112 */ 113 public static void main(String[] args) { 114 115 MySysUI mySysUI = new MySysUI("EventSource UI"); 116 117 EventListener listeror = new MyEventListenor(); 118 119 mySysUI.addEventListeror(listeror ); 120 121 mySysUI.doService("执行业务"); 122 } 123 124 }
一点感悟:
1.本质就是一种观察者模式的实现,是我们自定义业务组件的一直开发思想,结合事件机制进行通信
2.匿名内部类就是一种挂接的扩展接口,有业务使用直接扩展即可,就是接口回调机制 HOOK机制,编程方式比较好,自己去写实现,不破坏整个业务处理的流程机制