`
绿窗明月
  • 浏览: 3309 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

简单的java事件体系

    博客分类:
  • java
阅读更多

之前写过自己的js框架,有比较完善的事件体系。当后台java代码用到类似功能时,发现写法相当繁琐,就开发了一个简单的事件系统。

用法如下:

1、定义监听器

 

public class PageRequestListener implements IListener {
    @Override
    public void execute(Event event) {
        //request为event的自定义属性
        HttpServletRequest request=event.getProperty("request");
        /*代码*/
    }
}

2、添加监听

 

 

//第一个参数是事件名称,第二个参数是监听器,IListener的实现类
Observable.addListener("PageRequest",new PageRequestListener());

 

 

3、触发事件

 

//Event第一个参数是事件名称,第二个参数是eventSource,可选。addProperty方法增加事件对象的自定义属性,可以链式调用。此处是增加的一个request对象
Observable.fireEvent(new Event("PageRequest").addProperty("request",request));


下边贴上源码,包含三个类,非别是Observable、IListener、Event

 

1、Observable

 

public class Observable {
    private static Map<String,List<IListener>> listeners=new HashMap<String,List<IListener>>();

    public static void addListener(String type,IListener ls){
        List<IListener> lsList= listeners.get(type);
        if(lsList==null){
            lsList=new ArrayList<IListener>();
            listeners.put(type,lsList);
        }
        lsList.add(ls);
    }

    public static void fireEvent(Event event){
        String type=event.getType();
        List<IListener> lsList= listeners.get(type);
        if(lsList!=null){
            for(IListener ls:lsList){
                ls.execute(event);
            }
        }
    }
}

2、IListener

 

 

public interface IListener extends EventListener {
    public  void execute(Event e);
}

3、Event

 

 

public class Event extends EventObject {
    private String type;
    private Map<String, Object> properties;

    public Event(String type, Object source) {
        super(source);
        this.type = type;
    }

    public Event(String type) {
        super("none");
        this.type = type;
    }

    public Event(Object source, String type, Map<String, Object> properties) {
        super(source);
        this.type = type;
        this.properties = properties;
    }

    public String getType() {
        return type;
    }

    public <T> T getProperty(String key) {
        return properties != null ? (T) properties.get(key) : null;
    }

    public Event addProperty(String key, Object value) {
        if (this.properties == null) {
            this.properties = new HashMap<String, Object>();
        }
        this.properties.put(key, value);
        return this;
    }
}






 

 

分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包11

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包6

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包9

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包4

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包101

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包5

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包8

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包10

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java核心技术第八版源代码(全)

    1.2.1 简单性 1.2.2 面向对象 1.2.3 网络技能 1.2.4 健壮性 1.2.5 安全性 1.2.6 体系结构中立 1.2.7可移植性 1.2.8 解释型 1.2.9 高性能 1.2.10 多线程 1.2.11 多态性 1.3 Java Applet与Internet 1.4 Java发展简史 ...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ Java面试题40.jQuery中页面加载完毕事件.mp4 │ Java面试题41.jQuery中Ajax和原生js实现Ajax的关系.mp4 │ Java面试题42.简单说一下html5.mp4 │ Java面试题43.简单说一下css3.mp4 │ Java面试题44.bootstrap的是...

    java开源包3

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包1

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    【计算机毕业设计】基于JAVA的连连看小游戏源代码

    通过本项目能帮助你掌握Java小程序的工作原理和使用方法、熟练掌握Java的事件处理机制、简述Java游戏开发现状和走向、了解AWT的基本体系结构,掌握窗口的基本原理、了解Swing的基本体系结构,掌握Swing组件的使用...

    [java.核心技术.第八版].Core.Java..8th.Edition源代码 示例代码

    1.2.1 简单性 1.2.2 面向对象 1.2.3 网络技能 1.2.4 健壮性 1.2.5 安全性 1.2.6 体系结构中立 1.2.7可移植性 1.2.8 解释型 1.2.9 高性能 1.2.10 多线程 1.2.11 多态性 1.3 Java Applet与Internet 1.4 Java发展简史 ...

    JAVA基础课程讲义

    JAVA技术体系架构 14 JAVA的特性和优势 14 JAVA应用程序的运行机制 15 JVM(JAVA VIRTUAL MACHINE) 16 Java运行时环境JRE(Java Runtime Environment) 17 JAVA语言应用范围 18 第一个JAVA程序 18 JAVA开发环境搭建 18 ...

    java开源包2

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java初学者必看

    1.7.3 Java虚拟机的体系结构 1.8 垃圾收集器 1.9 本章习题 第2章 Java开发环境 2.1 J2SE的下载和安装 2.1.1 J2SE的下载 2.1.2 J2SE的安装 2.2 环境变量的配置与测试 2.2.1 设置环境变量path 2.2.2 设置环境...

Global site tag (gtag.js) - Google Analytics