一、监听器原理

  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. mysql存储过程模板

    CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_test`(IN `nodeCode` varchar(100),IN `id` varchar(36) ...

  2. linux下close 掉socket 之后 阻塞的recv 不会立即返回

    转载自:http://www.cnblogs.com/wainiwann/p/3942203.html 在开发的一个基于rtmp聊天的程序时发现了一个很奇怪的现象. 在windows下当我们执行 cl ...

  3. LeetCode 1. Two Sum (JavaScript)

    1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...

  4. 2 模拟登录_Post表单方式(针对chinaunix有效,针对csdn失效,并说明原因)

    参考精通Python网络爬虫实战 首先,针对chinaunix import urllib.request #原书作者提供的测试url url="http://bbs.chinaunix.n ...

  5. “微软热爱Linux“ – 心声传遍中国

    去年十月微软CEO Satya Nadella在旧金山的活动中说 “微软热爱Linux(Microsoft loves Linux)”,这句话让诸多人感到惊喜.至此之后,您可以在众多Linux和开源的 ...

  6. CSS3 transition介绍

    transition从效果上看是一种平滑过渡的动画,本质上是在线性时间内将属性从开始值过渡到结束值.例如获得焦点,点击鼠标等动作导致CSS属性值的变化是瞬间完成的,感觉有点生硬.用transition ...

  7. C# WinForm窗体及其控件自适应各种屏幕分辨率

    C# WinForm窗体及其控件自适应各种屏幕分辨率 一.说明  我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观.实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置 ...

  8. 关于VSTS自动Build报错问题之Microsoft.Net.Compilers

    报错内容如下: --06T11::.6035712Z ##[error]Dotnet command failed with non-zero exit code on the following p ...

  9. WMIC应用

    WMI管理:wmic      product 列出已安装软件 wmic product where name='tools-windows' call Uninstall 卸载已安装软件 进入wmi ...

  10. CSS边框长度控制

    以前需要边框长度比容器小一些时,我用div嵌套.后来发现伪类在实现这个效果时很方便,只需要一个div就够了,另外调整padding和margin都不会很麻烦. <div class=" ...