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机制,编程方式比较好,自己去写实现,不破坏整个业务处理的流程机制