监听器(Listener)详解及举例
概念:
监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。
监听器组成要素:
事件源:事件发生的源头,属于被监听的对象。例如一个开关
事件对象:被用来包装事件源,比如开关打开、关闭事件。
监听器:定义事件发生后的动作,通常事件对象作为监听器中定义的函数入参。
监听器原理:

实现简单监听器:
/**
* 事件源对象
*/
public class EventSource { private List<EventListener> listeventListeners = new ArrayList<>(); /**
* 注册监听器
* @param eventListener
*/
public void registerEventListener(EventListener eventListener){
listeventListeners.add(eventListener);
} /**
* 销毁监听器
* @param eventListener
*/
public void destroyEvnetListener(EventListener eventListener){
listeventListeners.remove(eventListener);
} /**
* 通知所有的监听器监听此事件对象
* @param eventObject
*/
public void notifyListener(EventObject eventObject){
listeventListeners.forEach(eventListener -> {
eventListener.handleEvent(eventObject);
});
} /**
* 事件源产生open事件对象
*/
public void open(){
EventObject eventObject = new EventObject("open");
notifyListener(eventObject);
} /**
* 事件源产生close事件对象
*/
public void close(){
EventObject eventObject = new EventObject("close");
notifyListener(eventObject);
}
}
/**
* 监听器接口
*/
public interface EventListener extends java.util.EventListener { /**
* 事件处理器
* @param eventObject
*/
void handleEvent(EventObject eventObject); }
/**
* 监听器接口实现类处理事件逻辑
*/
public class EventListenerImpl implements EventListener {
@Override
public void handleEvent(EventObject eventObject) { eventObject.doEvent();
if (eventObject.getSource().equals("open")) {
//当事件是open时业务逻辑
System.out.println("监听器执行方法:open....");
} if (eventObject.getSource().equals("close")) {
//当事件时close时业务逻辑
System.out.println("监听器执行方法:close....");
}
}
}
/**
* 事件对象
*/
public class EventObject extends java.util.EventObject { public EventObject(Object source) {
super(source);
} public void doEvent(){
System.out.println("事件源产生的事件对象:"+this.getSource());
}
}
/**
* 启动类
*/
public class TestListener {
public static void main(String[] args) {
//创建事件源对象
EventSource eventSource = new EventSource();
//创建监听器对象
EventListener eventListener1 = new EventListenerImpl();
EventListener eventListener2 = new EventListenerImpl();
//将监听器对象注册进事件源对象
eventSource.registerEventListener(eventListener1);
eventSource.registerEventListener(eventListener2);
//操作事件源产生事件
eventSource.open();
//销毁一个监听器
eventSource.destroyEvnetListener(eventListener1);
//操作事件源产生close事件
eventSource.close();
}
运行结果:
事件源产生的事件对象:open
监听器执行方法:open....
事件源产生的事件对象:open
监听器执行方法:open....
事件源产生的事件对象:close
监听器执行方法:close....
Process finished with exit code 0
监听器(Listener)详解及举例的更多相关文章
- Servlet 监听器Listener详解
转自:http://blog.csdn.net/u012228718/article/details/41730799 一.简介 (一)概述 1.Listener 用于监听 Javaweb程序中的事件 ...
- java Web 监听器Listener详解
简介 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext.HttpSession和 ServletRequest这三大域对象的创建 ...
- Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]
Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...
- Servlet监听器详解及举例
监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 监听器原理 监听原理 1.存在事件源 ...
- java web学习总结(二十) -------------------监听器属性详解
一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...
- iptables命令详解和举例
网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能有所帮助.网管员的安全意识要比空喊Linux安全重要得多. iptables -Fiptables -Xiptables -F ...
- java的移位运算详解(举例说明)
1)java中无符号右移:>>>,下面是一个int型的负数,然后每次移动一位. int k = -0x123;System.out.println(Integer.toBinaryS ...
- Fragment详解及举例
1.为什么用Fragment(Android3.0提出)来替代TabActivity(Android4.0以后正式被弃用)? 因为Fragment可以适应各种不同屏幕大小,也就是适应不同屏幕的分辨率. ...
- linux sed命令详解 --大量举例
1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后 ...
随机推荐
- DeepFool: a simple and accurate method to fool deep neural networks
目录 概 主要内容 二分类模型 为线性 为一般二分类 多分类问题 仿射 为一般多分类 Moosavidezfooli S, Fawzi A, Frossard P, et al. DeepFool: ...
- 编写Java程序,利用List维护用户信息
返回本章节 返回作业目录 需求说明: 将新增的用户信息添加到List集合. 用户信息包括用户编号.姓名和性别. 按照姓名和性别查找用户信息. 实现思路: 创建类UserInfo,在该类中定义3个Str ...
- JUC之多线程锁问题
多线程锁 8种问题锁状态: 该部分全部围绕的是以下内容并结合相应的例子:synchronized实现同步的基础:Java中每个对象都可以作为锁. 具体表现为以下三种形式:(之前只是简单的了解) 对于普 ...
- 图像数据到网格数据-3——实现Cuberille算法
前言 这是本博客网格生成算法系列的第三篇,第一篇里面介绍了最为流行的MarchingCubes算法,第二篇中使用新三角形表来对MC算法进行了简化改进,形成了SMC算法.而这篇将介绍一种新的不同与MC算 ...
- Drupal 8 环境搭建部署
运行环境安装 系统:Ubuntu Server 16.04 (ubuntu-16.04.4-server-amd64.iso) Web服务器:Apache / 2.4.18 数据库:Mysql / ...
- Python的内存管理和垃圾回收机制
内存管理 Python解释器由c语言开发完成,py中所有的操作最终都由底层的c语言来实现并完成,所以想要了解底层内存管理需要结合python源码来进行解释. 1. 两个重要的结构体 include/o ...
- CentOS6.5安装Hive-1.2.2
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6627669615377908231/ Hadoop环境已安装完成<CentOS6.5下安装Hadoop-2. ...
- Servlet中分发器和重定向两兄弟
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513702111698485767/ 弄清这个两兄弟,我们还是从练习中去理解 先创建一个数据提交页面,注意路径 编 ...
- Vulnhub系列:Tomato(文件包含getshell)
这个靶机挺有意思,它是通过文件包含漏洞进行的getshell,主要姿势是将含有一句话木马的内容记录到ssh的登录日志中,然后利用文件包含漏洞进行包含,从而拿到shell 0x01 靶机信息 靶机:To ...
- SSRF漏洞用到的其他协议(dict协议,file协议)
0x00 引言 当SSRF打内网reids时,若gopher协议用不了,我们也可以用其他协议 0x01 dict协议一.定义:词典网络协议,在RFC 2009中进行描述.它的目标是超越Webster ...