java程序员-http://www.it-ebooks.info/

年轻的我,脚踩大地,仰望天空,路还很长....

博客园 首页 新随笔 联系 订阅 管理
  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机制,编程方式比较好,自己去写实现,不破坏整个业务处理的流程机制

 

posted on 2014-01-17 12:50  gstsyyb  阅读(355)  评论(0编辑  收藏  举报