`

事件框架使用实例

阅读更多

使用实例

10.6.1 定义事件类型

public class ExampleEventType extends AbstractEventType  {

    public static EventType type1 = new ExampleEventType("type1");

    public static EventType type2 = new ExampleEventType("type2");

    public static EventType type2withtarget = new ExampleEventType("type2 with target");   

    public ExampleEventType(String eventtype)

    {

       super.eventtype = eventtype;

    }

} 

10.6.2定义事件监听器,实现事件处理方法并注册在事件激发器中

public class ExampleListener implements Listener{

    /**

     * 注册监听器,监听ExampleEventType.type1ExampleEventType.type2两种类型的事件

     * 事件消息可以是本地事件,可以是远程本地消息,也可以是远程消息

     */

    public void init()

    {

       List eventtypes = new ArrayList();

       eventtypes.add(ExampleEventType.type1);

       eventtypes.add(ExampleEventType.type2);

       eventtypes.add(ExampleEventType.type2withtarget);

       //监听器监听的事件消息可以是本地事件,可以是远程本地消息,也可以是远程消息

       //如果不指定eventtypes则监听所有类型的事件消息

       NotifiableFactory.getNotifiable().addListener(this, eventtypes);

       /**

        * 只监听本地消息和本地发布的本地远程消息

        * NotifiableFactory.getNotifiable().addListener(this, eventtypes,Listener.LOCAL);

        * 只监听本地消息和从远程消息广播器发布的远程消息和远程本地消息

        * NotifiableFactory.getNotifiable().addListener(this, eventtypes,Listener.LOCAL_REMOTE);

        * 只监听从远程消息广播器发布的远程消息和远程本地消息

        * NotifiableFactory.getNotifiable().addListener(this, eventtypes,Listener.REMOTE);

        */      

    }

    /**

     * 处理监听到的消息

     */

    public void handle(Event e) {

      

       if(e == null)

           return;

       if(e.getType().equals(ExampleEventType.type1))

       {

           System.out.println("Receive event type is " + e.getType());          

       }

       else if(e.getType().equals(ExampleEventType.type2))

       {

           System.out.println("Receive event type is " + e.getType());

       }

       else if(e.getType().equals(ExampleEventType.type2withtarget))

       {

           System.out.println("Receive event type is " + e.getType() + " from "  + e.getEventTarget());

       }

       else

       {

           System.out.println("Unknown event type :" + e.getType());

       }      

    } 

} 

10.6.3 发布具体的事件消息 

public class ExampleEventPublish {

    public static void publishEventtype1()

    {

       /**

        * 构建事件消息【hello world type2.】,指定了事件的类型为ExampleEventType.type2

        * 默认的事件消息广播途径为Event.REMOTELOCAL,你可以指定自己的事件广播途径

        *  消息只在本地传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的本地消息监听器和本地远程事件监听器

         * Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.LOCAL);

        *  消息在网络上传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的远程消息监听器和本地远程事件监听器,同时也会直接发送给本地监听器

        *  Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.REMOTELOCAL);

        *  消息在网络上传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的远程消息监听器和本地远程事件监听器

        *  Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.REMOTE);

        */

       Event event = new EventImpl("hello world type1.",ExampleEventType.type1);      

       /**

        * 事件以同步方式传播

        */      

       EventHandle.getInstance().change(event);      

    }   

    public static void publishEventtype2()

    {

       /**

        * 构建事件消息【hello world type2.】,指定了事件的类型为ExampleEventType.type2

        * 默认的事件消息广播途径为Event.REMOTELOCAL,你可以指定自己的事件广播途径

        *  消息只在本地传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的本地消息监听器和本地远程事件监听器

        * Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.LOCAL);

        *  消息在网络上传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的远程消息监听器和本地远程事件监听器,同时也会直接发送给本地监听器

        *  Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.REMOTELOCAL);

        *  消息在网络上传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的远程消息监听器和本地远程事件监听器

        *  Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.REMOTE);

        */   

       Event event = new EventImpl("hello world type2.",ExampleEventType.type2);

       /**

        * 消息以异步方式传递*/        EventHandle.getInstance().change(event,false);      

    }   

    public static void publishEventtype2Withtarget()

    {

       /**

        * 构建事件消息【hello world type2.】,指定了事件的类型为ExampleEventType.type2withtarget

        * 默认的事件消息广播途径为Event.REMOTELOCAL,你可以指定自己的事件广播途径

   

        *  消息在网络上传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的远程消息监听器和本地远程事件监听器,同时也会直接发送给本地监听器

        *  Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.REMOTELOCAL);

        *  消息在网络上传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的远程消息监听器和本地远程事件监听器

        *  Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.REMOTE);

        */EventTarget target = new EventTarget("149.16.20.177",8088);

       Event event = new EventImpl("hello world type2 with target[" + target +"].",

                            ExampleEventType.type2withtarget,

                            target,

                            Event.REMOTE);EventHandle.getInstance().change(event);    }

}

10.6.4运行ExampleEventPublish中发布事件的方法

运行ExampleEventPublish中发布事件的方法,ExampleListener将会监听到其发布的事件,并且调用handle方法处理到监听到的消息。    

public class TestRun {

    public static void main(String args[])

    {

       ExampleListener listener = new ExampleListener();

       //调用init方法注册监听器,这样就能收到事件发布器发布的事件

       listener.init();      

       ExampleEventPublish.publishEventtype1();

       ExampleEventPublish.publishEventtype2();

       ExampleEventPublish.publishEventtype2Withtarget();    }

}

分享到:
评论

相关推荐

    SSH2框架搭建实例源码

    这个实例源码使用的是Spring 3.2、Struts2 2.3.4和Hibernate 4.2这三个框架的较新版本,提供了一个基础的用户登录和用户管理功能的实现。下面我们将详细探讨这些技术及其在项目中的应用。 **Spring框架**: Spring...

    Django框架 项目 实例

    Django 框架 项目 实例Django 框架 项目 实例Django 框架 项目 实例Django 框架 项目 实例Django 框架 项目 实例Django 框架 项目 实例Django 框架 项目 实例

    Prism框架实例、MEF框架实例

    本解决方案中包含3个程序,1、简单的LocalDB数据的连接,项目名称是LocalDBOperate;2、Prism框架的简单实例,项目名称是Desktop.MainWindow;3、MEF的简单实例,项目名称MEFTest

    ssh框架搭建实例源码2

    本资源是在“ssh框架搭建实例源码1”基础上增加了修改了分页技术,实现数据从数据库中读取,并补充“ssh框架搭建实例源码1”中忘记上传的与分页技术相关的jar包,更新数据库文件ssh.sql。本资源所需的jar包请到“ssh...

    ssh框架搭建实例源码4

    本资源所需的jar包请到“ssh框架搭建实例源码2”和“ssh框架搭建实例源码”中下载: http://download.csdn.net/detail/linchengzhi/4100204 http://download.csdn.net/download/linchengzhi/4076267 相关链接: ...

    ssh框架搭建实例源码5

    本资源所需的jar包请到“ssh框架搭建实例源码2”和“ssh框架搭建实例源码”中下载: http://download.csdn.net/detail/linchengzhi/4100204 http://download.csdn.net/download/linchengzhi/4076267 相关链接: ...

    ssh框架搭建实例源码6

    本资源是在“ssh框架搭建实例源码5替换”基础上使用struts2通配符进行CRUD的跳转;使用struts2标签进行分页显示和回显,使得项目结构相当清晰,极易理解和再次利用。 注意:请点击报警管理进行操作,其它链接功能...

    SSM框架项目实例

    通过学习和实践这个SSM框架的在线考试系统实例,开发者可以深入理解Java Web开发流程,掌握SSM框架的整合使用,以及如何构建一个完整的、具有实际功能的Web应用程序。此外,还可以学习到数据库设计、用户认证、前端...

    ssh框架入门实例

    这个入门实例将引导新手逐步理解并掌握SSH框架的使用,从而提升Web应用开发的能力。 首先,Struts2作为MVC(Model-View-Controller)框架,负责处理HTTP请求,控制业务流程,以及视图展现。它通过Action类处理用户...

    一个Vue前端框架使用简单实例

    下文是Vue的简单使用并使用nginx进行发布。 1.环境:本次实例在windows环境进行,所以首先下载windows环境下的nginx并置于相关目录下,本次实验的nginx版本为1.12.2 2.下载vue.min.js文件,这个请读者自行解决 3....

    ssh框架搭建实例源码

    本资源是一个最简单的一个ssh框架实例,包含完整的代码(dao层有annotation和xml两种实现方式修改applicationContext.xml和hibernate.cfg.xml相应位置就可以切换),数据库ssh.sql文件,和所有的jar包,运行于eclips...

    ssh框架搭建及实例ssh框架

    ssh框架搭建及实例ssh框架 ssh框架搭建及实例ssh框架

    MFC应用框架的实例源码

    在“MFC应用框架的实例源码”中,我们可以深入理解MFC的工作机制。这个实例可能包含了一系列的源代码文件,它们展示了如何创建、管理和操作MFC应用程序的各个部分。这些源码通常会涉及以下核心知识点: 1. **...

    SSH 框架整合实例

    通过这个整合实例,开发者不仅可以理解SSH框架间的协作,还能学习到如何组织Java Web项目,处理数据库操作,以及使用注释提高代码可读性。对于想要提升Java Web开发技能的人来说,这是一个非常有价值的实践案例。

    Android Volley框架使用实例

    **Android Volley 框架详解** Volley 是 Google 在 2013 年的 I/O 大会上推出的一个强大的网络通信库,专为 Android 应用设计,旨在简化网络请求处理并提供高效的图片加载功能。Volley 的核心设计理念是速度和易用...

    SSM框架搭建实例,war版本

    这是一份SSM基础框架的实例,其中带有测试类,可以直接在Eclipse中导入运行,供学习参考。集合了Spring,Spring-MVC,MyBatis框架,可作为项目开发的模板文件。

    多款Delphi MVC框架应用实例.rar

    这个压缩包可能包含了几个这样的框架实例,例如,可能是用以简化MVC实现的库,或者是特定领域的MVC解决方案,如Web应用或桌面应用。 "codesc.net"这个名字可能是指一个基于Delphi的MVC框架或项目,它可能是一个网络...

Global site tag (gtag.js) - Google Analytics