zoukankan      html  css  js  c++  java
  • java自定义事件机制分析

      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机制,编程方式比较好,自己去写实现,不破坏整个业务处理的流程机制
  • 相关阅读:
    【ArcGIS 10.2新特性】ArcGIS 10.2将PostgreSQL原生数据发布为要素服务
    字节流,字符流 有什么区别
    java--模板方法模式
    hdu2829 四边形优化dp
    【ArcGIS 10.2新特性】ArcGIS 10.2 for Desktop 新特性(二)
    B/S架构 Web打印程序(Argox)
    poj 1611 The Suspects(并查集)
    microsoft visual studio遇到了问题,需要关闭
    [置顶] Windows显示驱动(WDDM)编程初步(2)
    Linux查看设置系统时区
  • 原文地址:https://www.cnblogs.com/gstsyyb/p/3523846.html
Copyright © 2011-2022 走看看