zoukankan      html  css  js  c++  java
  • 简单事件机制的研究

    事件机制模型最简单的应用:函数调用,如例所示:

    定义函数:void HandleEvent(){

    };

    调用函数:

    void    EventExample(){

    HandleEvent()

    }

    这个简单的函数调用可以理解为:模块A(函数EventExample)触发事件交给给模块B(HandleEvent)处理,这是我理解的最简单的事件机制模型。

    上述模型的问题在于:整个事件触发的模块与处理的模块在时间和空间上的关系过于紧密,事件本身任何变化都会引起代码较大修改,比如增加事件携带的信息;

    接下来将事件的触发者与事件处理者分别定位为单独的类

    事件触发者:

    class EventTrigger{

    void TrigEvent();

    }

    事件处理者:

    class EventHandler{

    void  HandleEvent();

    }

    事件触发者的职责是触发事件,事件处理者的职责是处理事件。为了保证事件被正确处理,那么事件触发者必须了解事件处理者的信息,所以:

    EventTrigger或者维护事件处理者的引用或者将事件处理者以参数的形式传入。在两种方式下,事件触发者与事件处理者均硬编码绑定了。

    为了解决事件触发者对事件处理者硬编码实现的依赖,可以定义事件处理者的抽象接口:

    class IEventHandler{

    virtual void HandleEvent();

    };

    到目前为止,事件机制中还有两个重要的问题:1. 事件信息表达  2. 多个触发者多个处理者交互的情况

    首先:定义事件实体

    class Event;

    然后引入事件分发者:

    class Dispatcher;

    事件触发者触发事件,并将事件信息传送给事件处理者,这种情况下触发者与处理者直接依赖;

    事件触发者触发事件,通知分发者,分发者继续通知事件处理者,则触发者与处理者无直接依赖;

    为了解决事件、分发者与触发者和处理者硬编码依赖的问题,分别定义事件与分发者的抽象接口:

    class IEvent;

    class IDispatcher;

    不同的事件子类表示不同的事件

    不同的分发者可以支持不同的分发业务逻辑;

    至此,简单的事件机制模块阐述完毕!

  • 相关阅读:
    Oracle:Using the DBMS_STATSpackage
    Oracle partitioning is not always a good idea.
    Oracle: Benefits and consequences of the NOLOGGING option
    Oracle :Insert ways.
    Oracle:临时表的统计信息
    C#中使用DTS来导入数据及相关问题
    [收藏]CSS网页制作时实现自动换行的小技巧
    新加了牛人的Blog链接
    在.Net下使用Access 的日期类型 及与js的日历控件交互
    在程序中生成PDF
  • 原文地址:https://www.cnblogs.com/yellowcat/p/5260301.html
Copyright © 2011-2022 走看看