监听器(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命令处理缓冲区中的内容,处理完成后 ...
随机推荐
- IT6563替代芯片|DP转HDMI 2.0音视频讯号转换芯片|CS5263Capstpne
IT6563替代芯片|CS 5263|4LAN DP转HDMI 2.0音视频讯号转换芯片IT6563是一款4LAN EDP转HDMI2.0 HDMI2.0转换器芯片.IT6563FN结合Display ...
- Java Web程序设计笔记 • 【第1章 Web应用程序】
全部章节 >>>> 本章目录 1.1 Web 应用程序 1.1.1 Web 应用程序概述 1.1.2 Web 应用程序的工作原理 1.1.3 实践练习 1.2 HTTP协议 ...
- Java中对象的内存分配机制
一.内存划分 Java把内存划分为两种,一种是栈内存,另一种是堆内存. 1.栈内存 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配.当在一段代码块定义一个变量时,Java就在栈 ...
- docker学习:docker---centos安装
查看目标镜像 docker search centos 拉取镜像 docker pull centos 查看镜像 docker images 启动镜像 docker run -itd --privil ...
- .net core使用rabbitmq消息队列 (二)
之前有写过.net core集成使用rabbitmq的博文,见.net core使用rabbitmq消息队列,但是里面的使用很简单,而且还有几个bug,想改下,但是后来想了想,还是算了,之前使用的是. ...
- lscpu
[root@kvm02 ~]# lscpu Architecture: x86_64 #cpu架构CPU op-mode(s): 32-bit, 64-bitByte Order: Littl ...
- sqlserver - 判断字段是否是纯数字
PATINDEX('%[^0-9|.|-|+]%',w.waterMeterNo)=0 如 SELECT w.* FROM [dbo].[waterMeterInfo] w where isnull( ...
- Hive的导入导出和常用过滤语句的学习
原文: https://www.toutiao.com/i6769166601871688196/?group_id=6769166601871688196 数据的导入 load data [loca ...
- Jupyter常用配置
一 安装 pip install --upgrade jupyterthemes 二 设置主题 #查看主题列表 jt -l #设置主题并打开工具栏 jt -t chesterish -T 三 设置列 ...
- Spring Security 接口认证鉴权入门实践指南
目录 前言 SpringBoot 示例 SpringBoot pom.xml SpringBoot application.yml SpringBoot IndexController SpringB ...