一、监听器原理

  1. 监听器是基于事件驱动的,用于对操作事件进行监听、处理,是观察者设计模式的应用
  2. 监听器三元素:

2.1 事件源:事件发生的源头

2.2 事件:对事件进行抽象、封装

2.3 监听器:用于监听事件源,当事件发生时进行处理

二、监听器实例:此案例主要围绕购物车场景操作事件的实现,有一定的实际项目参考性

  1. UML类图模型
  2. 接口及实现类、场景类定义
  3. package com.wuji;
    
    import java.util.EventListener;
    
    /**
    * event listener handler interface must extends EventListener
    */
    public interface EventListenerHandler extends EventListener {
    void handler(EventInfo eventInfo);
    }
    package com.wuji;
    
    /**
    * Event Info operator interface
    */
    public interface EventInfo {
    String getEventType(); Object getEventSource();
    }
  4. package com.wuji;
    
    /**
    * 添加事件监听器,实现监听器接口类
    */
    public class AddEventListenerHandler implements EventListenerHandler { public void handler(EventInfo eventInfo) {
    if(eventInfo==null){
    return;
    }
    if(eventInfo.getEventType().equals("add")){
    System.out.println("添加购物车事件。。。");
    } EventSource eventSource=(EventSource)eventInfo.getEventSource();
    int productCount=eventSource.getCount();
    System.out.println("购物车中现在有商品:" + productCount + "件");
    }
    }
    package com.wuji;
    
    import java.util.EventObject;
    
    public class AddEvent extends EventObject implements EventInfo {
    
        private final String eventType="add";
    public AddEvent(Object source){
    super(source);
    }
    @Override
    public String getEventType() {
    return eventType;
    } @Override
    public Object getEventSource() {
    return getSource();
    }
    }
  5. package com.wuji;
    
    import java.util.Collection;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.List; /**
    * 事件源:具体为购物辐操作事件源
    */
    public class EventSource {
    private Collection<EventListenerHandler> eventListenerHandlers=null;
    private int count=0; public int getCount(){
    return count;
    } public void registryEventListenerHandler(EventListenerHandler eventListenerHandler){
    if(eventListenerHandlers==null){
    eventListenerHandlers=new HashSet<EventListenerHandler>();
    eventListenerHandlers.add(eventListenerHandler);
    }
    } public void removeEventListenerHandler(EventListenerHandler eventListenerHandler){
    if(eventListenerHandlers!=null){
    eventListenerHandlers.remove(eventListenerHandler);
    }
    } public void addCar(){
    ++count;
    if(eventListenerHandlers!=null){
    EventInfo eventInfo=new AddEvent(this);
    notifies(eventInfo);
    }
    System.out.println("向购物车添加商品成功...");
    } private void notifies(EventInfo eventInfo){
    Iterator iterator=eventListenerHandlers.iterator();
    while (iterator.hasNext()){
    ((EventListenerHandler)iterator.next()).handler(eventInfo);
    }
    } }
    package com.wuji;
    
    public class Client {
    public static void main(String[] args) {
    EventSource eventSource=new EventSource();
    EventListenerHandler addEventListenerHandler=new AddEventListenerHandler();
    eventSource.registryEventListenerHandler(addEventListenerHandler);
    //eventSource.removeEventListenerHandler(addEventListenerHandler);
    eventSource.addCar();
    eventSource.addCar();
    }
    }

三、总结:上面的案例是围绕购物车操作场景进行事件监听操作的,主要涉及三个元素即事件源【EventSource】、事件信息接口【EventInfo】、事件监听处理器接口【EventListenerHandler】,其中事件信息和事件监听处理器是接口,具体实现为:添加事件信息、添加事件监听处理器,具体见上面相关代码。事件监听处理器传递了事件源,可以通过事件源进行操作相关行为。如本例的获取购物车商品数量。大家可以试着实现购物车的删除事件并运行查看结果。事件源封装了事件注册中心,可以注册和取消多个具体事件监听器。

												

Java监听器原理及实例的更多相关文章

  1. JAVA监听器原理

    http://blog.csdn.net/longyulu/article/details/25054697 JAVA监听器原理 标签: 监听器 2014-05-05 15:40 9070人阅读 评论 ...

  2. Java NIO原理及实例

    Java NIO是在jdk1.4开始使用的,它既可以说成“新I/O”,也可以说成非阻塞式I/O.下面是java NIO的工作原理: 1. 由一个专门的线程来处理所有的 IO 事件,并负责分发. 2. ...

  3. java监听器原理理解与实现

    监听器模型涉及以下三个对象,模型图如下: (1)事件:用户对组件的一个操作,称之为一个事件(2)事件源:发生事件的组件就是事件源(3)事件监听器(处理器):监听并负责处理事件的方法 执行顺序如下: 1 ...

  4. 分布式一致性协议Raft原理与实例

    分布式一致性协议Raft原理与实例 1.Raft协议 1.1 Raft简介 Raft是由Stanford提出的一种更易理解的一致性算法,意在取代目前广为使用的Paxos算法.目前,在各种主流语言中都有 ...

  5. Java NIO原理分析

    Java IO 在Client/Server模型中,Server往往需要同时处理大量来自Client的访问请求,因此Server端需采用支持高并发访问的架构.一种简单而又直接的解决方案是“one-th ...

  6. Java编译原理

    http://wenku.baidu.com/view/f9b1734b87c24028915fc3a3.html Java编译原理 1. 关于动态加载机制 学习Java比C++更容易理解OOP的思想 ...

  7. 《Java虚拟机原理图解》1.4 class文件里的字段表集合--field字段在class文件里是如何组织的

    0.前言 了解JVM虚拟机原理是每个Java程序猿修炼的必经之路.可是因为JVM虚拟机中有非常多的东西讲述的比較宽泛.在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描写 ...

  8. Java工作原理:JVM,内存回收及其他

    JAVA虚拟机系列文章 http://developer.51cto.com/art/201001/176550.htm Java语言引入了Java虚拟机,具有跨平台运行的功能,能够很好地适应各种We ...

  9. JAVA监听器Listener

    JAVA监听器Listener 一. 简介 监听器用于对web中内置对象的状态或者属性变化进行监听并做出相应响应的一种Servlet;在内置对象的生命周期中,产生.销毁等状态发生变化时,监听器就会进行 ...

随机推荐

  1. 浏览器根对象window之值为字符串的属性

    1. string属性 1.1 origin window.origin使用返回的是当前网页的网址.打开百度首页,并在控制台中输入 window.origin 控制台中会输出"https:/ ...

  2. 理解JMeter聚合报告(Aggregate Report)

    Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅. 如果 ...

  3. Java Web开发中的转发和重定向的问题

    Java Web的页面实现跳转有两种方式,一种是转发,另外一种是重定向.一般来说,转发比重定向快.重定向会经过客户端,转发却不会. 转发 request.getRequestDispatcher(&q ...

  4. 个人总结-7- 实现图片在MySQL数据库中的存储,取出以及显示在jsp页面上

    昨天主要是进行对数据库的内容提取出来并进行动态显示,这个只需要设置一个servlet从数据库中获取数据即可,只是图片比较特殊,不能显示. 今天准备继续找方法来实现图片得录入和显示到jsp中,准备从网上 ...

  5. springDataJpa学习笔记

    目录 前言 springData 准备 引用 xml配置初始化JPA pojo dao层接口 使用 新增.修改:save 删除 查询所有 根据ID查询findById 命名规则查询(条件查询) 自定义 ...

  6. 设计能长按并有动画效果且能触发事件的高级view

    设计能长按并有动画效果且能触发事件的高级view 效果图: 源码: LongTapAnimationView.h 与 LongTapAnimationView.m // // LongTapAnima ...

  7. Exchange Server 2016 管理邮箱收发限制

    备注:本文是Exchange Server 2016管理系列的配套课件,更加详细的讲解请参考视频课程,文章结尾有视频课程主页的链接. 进行收发邮件大小的限制是很有必要的,因为邮件服务器不能当作文件服务 ...

  8. ASP.NET Core 添加静态目录访问、使其它目录可被访问

    使用app.UseFileServer 在 public void Configure(){}中,修改或添加 app.UseFileServer(new FileServerOptions() { F ...

  9. 一点二次插值、二点二次插值 ,matlab

    syms f x a b c; f(x)=3*x^4-4*x^3-12*x^2; q(x)=a*x^2+b*x+c; %二点二次插值 x=[-1.2 -0.8]; ff=diff(diff(f)); ...

  10. namespace 相关

    #include <iostream>using namespace std;namespace first{ int var = 5;}namespace second{ double ...