监听器,实际上是一个回调函数,具体一点就是当代码执行到某一行的时候就会调用你预先设置好的语句。

这里我们有:

监听者时刻监听着事件源,当有事件源的时候,监听者就会知道发生了什么事!相似的,警察是监听者,嫌疑犯所干的事是事件源,嫌疑犯干什么事,警察都知道。

总体涉及到:事件、事件源(也就是事件的触发者,这里指嫌疑犯)、监听器(这里指警察);

相应地,我们写几个类或者接口:Event、EventSource、Listener

1、事件

package com.huai.mylisten;public class Event {private Object source;public Event(Object source){this.source = source;}public Object getSource(){return this.source;}
}

2、监听者(需要实现类)

<span style="font-family:Microsoft YaHei;font-size:18px;">package com.huai.mylisten;public interface Listener {void onMyEvent(Event event);}
</span>

3、监听者的实现类:

<span style="font-family:Microsoft YaHei;font-size:18px;">public class MyListener implements Listener{@Overridepublic void onMyEvent(Event event) {System.out.println(event.getSource());}}</span>

4、这时候,我们可以暂时写一个测试函数

<span style="font-family:Microsoft YaHei;font-size:18px;">package com.huai.mylisten;public class TempTest {public static void main(String[] args) {Event event = new Event("HelloWorld");MyListener listener = new MyListener();listener.onMyEvent(event);}
}</span>

可以看到,我们在main函数中实例化了事件和监听者的对象,同时在里面触发了监听的事件。但是,这个对于真正的监听器是有问题的,因为我们缺少了事件源,也就是嫌疑犯。好,下面我们就写事件源,同时让它来触发事件以及让监听者知道他正在干什么。

5、事件源

<span style="font-family:Microsoft YaHei;font-size:18px;">package com.huai.mylisten;import java.util.ArrayList;
import java.util.List;public class EventSource {private List<Listener> listenerList = new ArrayList<>();public void addListener(Listener listener){listenerList.add(listener);}public void doBadThing(){//嫌疑犯所干的事Event event = new Event("badthing");//让所有的监听者(警察)知道,我干了这件事for(Listener li : listenerList){li.onMyEvent(event);}}
}
</span>

从上面的事件源程序中我们可以看出,当嫌疑犯doBadThing的时候,就会有badthing这个事件产生,同时监听者就会知道。最后解释一下“监听者知道”具体指的是什么:从上面的程序中看到,我们直接调用了listener对象的onMyEvent(event)方法,所以,我们可以利用这个,在这个方法里面写我们自己实现的代码,当有doBadThing()的时候,采取相应的处理。这就是监听器。这个EventSource类可以类比一个按钮类,而doBadThing()这个函数便是点击按钮这个动作。每当点击按钮,就会new一个event事件,同时告诉监听者。

6、我们测试一些

<span style="font-family:Microsoft YaHei;font-size:18px;">package com.huai.mylisten;public class MainTest{public static void main(String[] args) {EventSource eventSource = new EventSource();eventSource.addListener(new MyListener());eventSource.doBadThing();}
}</span>

注意上面的addListener(listener);也就是把listener对象传进来,所以在EventSource类里面调用的listener.onMyEvent(event)的时候,实际上是调用刚刚传进的listener对象的方法。

如果还没有看懂,欢迎留言,我们一起讨论讨论!

自定义监听器 java相关推荐

  1. java web自定义监听器_Android自定义监听器Listener(自定义Java Callback回调事件)

    Callback回调事件介绍 Java或Android中创建异步回调最普遍的做法就是使用listener监听器或者observer观察者模式来解决,listener回调事件通常用于实现一个代码去监听另 ...

  2. 监听器——Listener(简述、自定义监听器) 略,过滤器与拦截器

    文章目录 监听器 自定义监听器 过滤器与拦截器 监听器 略,不怎么使用了. 见名知意,比如你上课玩手机,亲爱的班主任静悄悄地出现在你身后.你就是"被监听的对象",班主任就" ...

  3. android 实现自定义监听接口,Android在自定义类中实现自定义监听器方式

    Android在自定义类中实现自定义监听器方式 发布时间:2020-08-31 06:19:39 来源:脚本之家 阅读:203 作者:Simon_Qi 监听器可以说是Android开发中最常用的东西之 ...

  4. jaxb util_JAXB自定义绑定– Java.util.Date / Spring 3序列化

    jaxb util JaxB可以处理Java.util.Date序列化,但是需要以下格式: " yyyy-MM-ddTHH:mm:ss ". 如果需要将日期对象格式化为另一种格式怎 ...

  5. JAXB自定义绑定– Java.util.Date / Spring 3序列化

    JaxB可以处理Java.util.Date序列化,但是需要以下格式: " yyyy-MM-ddTHH:mm:ss ". 如果需要将日期对象格式化为另一种格式怎么办? 我有同样的问 ...

  6. drools项目中dmn文件调用自定义的java类

    在之前的文章里,介绍了OMG的复杂DMN的例子.其中Recommended Loan Products.7z这个例子是最复杂,场景跟真实.其中有个很在意的点是居然可以调用java代码 这里第一行是创建 ...

  7. JAVA自定义监听器(通过新线程+while+violate)

    前言 大一时,我学了Java的awt,一直觉得监听器是个很神奇方便的东西(监听各种事件,如鼠标点击事件等)一直想要写一个自己的监听器,也在百度查过监听器的实现原理,但是因为当时太菜,也忘了是看不懂还是 ...

  8. java自定义监听器例子_Java使用自定义注解实现为事件源绑定事件监听器操作示例...

    本文实例讲述了Java使用自定义注解实现为事件源绑定事件监听器操作.分享给大家供大家参考,具体如下: 一 定义注解 import java.lang.annotation.*; import java ...

  9. java自定义监听器例子_Spring 实现自定义监听器案例

    应用场景: 在一般的javaweb项目中经常有一些缓存是需要再项目启动的时候加载到内存中,这样就可以使用自定义的监听器来实现. 1.在web.xml中声明 com.cn.framework.const ...

最新文章

  1. 【响应式Web前端设计】CSS后代选择器和子代选择器
  2. html5 css3中的一些笔记
  3. android cmd
  4. GloVe: Global Vectors for Word Representation-学习笔记
  5. 佛罗里达州计算机学校,佛罗里达州立大学计算机科学
  6. hadoop 实战——网站日志数据分析
  7. 获取公众号文章封面 API 接口
  8. 三相逆变器双pi控制器参数如何调节_SPMSM控制:传统PI电流环参数的整定
  9. 做实验验证JDK8偏向锁:未启动、匿名偏向、偏向锁失效
  10. 编译原理(7):运行存储分配
  11. 如何让c语言编的游戏运行,如何用C语言编写游戏一.doc
  12. Java 8 实战教学大纲
  13. STAR法则的简历应用
  14. LinkedList集合基本操作(代码+注释)
  15. linux中管道的概念,浅谈Linux管道
  16. 验证arp的reply回答机制
  17. 谈谈我对opencv中IplImage图像参数widthstep的理解
  18. 电脑系统重装win10的方法教程,win10系统重装教程
  19. 什么软件可以搜索python答案_module是什么意思_module的翻译_音标_读音_用法_例句_爱词霸在线词典...
  20. Migrating from sun.misc.BASE64 to Java 8 java.util.Base64

热门文章

  1. 【c语言】蓝桥杯算法提高 3-2字符串输入输出函数
  2. 热门云服务超87GB电子邮箱和密码泄露,黑客已验证大部分数据
  3. java stream操作案例
  4. NGUI_Depth
  5. 让我们来谈谈对Linux的认识,值得每一位运维人员深读
  6. 你以为border-radius只是圆角吗?【各种角度】
  7. 【运维囧事】Citrix Xendesktop 与 XML 集成时添加信任关系
  8. 如何通过手机客户端Android、Iphone 等访问要求使用客户端证书SSL加密的https网站...
  9. SDK与IDE的选择(附上设置默认SDK)
  10. 怎么检测不到我的音频_检测不到硬盘怎么办?