监听器模型涉及以下三个对象,模型图如下:

(1)事件:用户对组件的一个操作,称之为一个事件
(2)事件源:发生事件的组件就是事件源
(3)事件监听器(处理器):监听并负责处理事件的方法

执行顺序如下:

1、给事件源注册监听器
2、组件接受外部作用,也就是事件被触发
3、组件产生一个相应的事件对象,并把此对象传递给与之关联的事件处理器
4、事件处理器启动,并执行相关的代码来处理该事件。

监听器模式:事件源注册监听器之后,当事件源触发事件,监听器就可以回调事件对象的方法;更形象地说,监听者模式是基于:注册-回调的事件/消息通知处理模式,就是被监控者将消息通知给所有监控者。

1、注册监听器:事件源.setListener;
2、回调:事件源实现onListener。

下面,来看两个demo。

一、简化了上图所示的模型,仅仅包含事件源与监听器

[java] view plain copy print?
  1. /*
  2. * 事件源:事件发生的地点
  3. */
  4. public class EventSource {
  5. private IEventListener mEventListener;
  6. // 注册监听器
  7. public void setEventListener(IEventListener arg) {
  8. mEventListener = arg;
  9. }
  10. // 触发事件
  11. public void EventHappened() {
  12. mEventListener.onclickButton();
  13. }
  14. }
[java] view plain copyprint?
  1. /* 
  2.  * 事件监听器,事件处理器 
  3.  */  
  4. public interface IEventListener {  
  5.     void onclickButton();  
  6. }  
[java] view plain copy print?
  1. public class Test {
  2. public static void main(String[] args) {
  3. // 事件源(被监听的对象)
  4. EventSource m1 = new EventSource();
  5. // 监听器
  6. IEventListener mEventListener = new IEventListener() {
  7. @Override
  8. public void onclickButton() {
  9. // TODO Auto-generated method stub
  10. System.out.println("你点击了按钮");
  11. }
  12. };
  13. // 注册监听器到事件源
  14. m1.setEventListener(mEventListener);
  15. m1.EventHappened();
  16. }
  17. }

【实验结果】
你点击了按钮

二、完整模型的demo

[java] view plain copy print?
  1. /*
  2. * 事件
  3. */
  4. public interface IEvent {
  5. void setEventListener(IEventListener arg);
  6. boolean ClickButton();
  7. boolean MoveMouse();
  8. }
[java] view plain copyprint?
  1. /* 
  2.  * 事件监听器,调用事件处理器 
  3.  */  
  4. public interface IEventListener {  
  5.   
  6.     void doEvent(IEvent arg);  
  7. }  
[java] view plain copy print?
  1. /*
  2. * 事件源:事件发生的地点
  3. */
  4. public class EventSource implements IEvent{
  5. private IEventListener mEventListener;
  6. boolean button;
  7. boolean mouse;
  8. //注册监听器
  9. @Override
  10. public void setEventListener(IEventListener arg){
  11. mEventListener = arg;
  12. }
  13. //触发事件
  14. public void mouseEventHappened(){
  15. mouse = true;
  16. mEventListener.doEvent(this);
  17. }
  18. @Override
  19. public boolean ClickButton() {
  20. return button;
  21. // TODO Auto-generated method stub
  22. }
  23. @Override
  24. public boolean MoveMouse() {
  25. // TODO Auto-generated method stub
  26. return mouse;
  27. }
  28. }
[java] view plain copyprint?
  1. public class EventSource2 implements IEvent {  
  2.     private IEventListener ml;  
  3.     boolean button;  
  4.     boolean mouse;  
  5.   
  6.     @Override  
  7.     public void setEventListener(IEventListener arg) {  
  8.         ml = arg;  
  9.     }  
  10.   
  11.     @Override  
  12.     public boolean ClickButton() {  
  13.         // TODO Auto-generated method stub  
  14.         return button;  
  15.     }  
  16.   
  17.     @Override  
  18.     public boolean MoveMouse() {  
  19.         // TODO Auto-generated method stub  
  20.         return mouse;  
  21.     }  
  22.   
  23.     // 触发事件  
  24.     public void buttonEventHappened() {  
  25.         button = true;  
  26.         ml.doEvent(this);  
  27.     }  
  28.   
  29. }  
[java] view plain copy print?
  1. public class Test {
  2. public static void main(String[] args) {
  3. // 事件源(被监听的对象)
  4. EventSource m1 = new EventSource();
  5. EventSource2 m2 = new EventSource2();
  6. // 监听器
  7. IEventListener mEventListener = new IEventListener() {
  8. @Override
  9. public void doEvent(IEvent arg) {
  10. if (true == arg.ClickButton()) {
  11. System.out.println("你点击了按钮");
  12. }else if(true == arg.MoveMouse()){
  13. System.out.println("你移动了鼠标");
  14. }
  15. }
  16. };
  17. // 注册监听器到事件源
  18. m1.setEventListener(mEventListener);
  19. m1.mouseEventHappened();
  20. // 注册监听器到事件源
  21. m2.setEventListener(mEventListener);
  22. m2.buttonEventHappened();
  23. }
  24. }

【实验结果】
你移动了鼠标
你点击了按钮

转载于:https://www.cnblogs.com/devin-ou/p/7989640.html

java监听器的原理与实现相关推荐

  1. java监听器的原理_[转]Java监听器的原理与实现

    监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动. 监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另 ...

  2. java 监听器实现原理

    监听器实现者: public class MyActivity extends Activity implements InternetManager.Listener { private TextV ...

  3. java监听器演示样例

    监听器的原理是观察者模式.就像明星(事件源)聚拢了一群粉丝(观察者).当明星有啥举动的时候会通过粉丝们报道出去. 订阅信息.计算器button都是该原理的应用. 以下写了一个监听器的小样例: pack ...

  4. Java监听器的处理方法_Java监听器的简单使用

    监听器在Java开发过程中发挥着重要作用,我们经常需要在系统刚一启动就要执行某些任务或进行某些操作,还有在统计当前在线用户数目时也需要使用监听器,因此有必要了解一下Java中监听器的使用过程和原理. ...

  5. java lock的原理,Java中Lock原理探究

    在对于lock锁的使用上,很多人只是掌握了最基础的方法,但是对实现的过程不是很清楚.这里我们对lock锁功能的实现进行分析,以ReentrantLock为例,分析它的锁类型,并对相关的调用方法进行展示 ...

  6. Java并发编程原理与实战六:主线程等待子线程解决方案

    Java并发编程原理与实战六:主线程等待子线程解决方案 参考文章: (1)Java并发编程原理与实战六:主线程等待子线程解决方案 (2)https://www.cnblogs.com/pony1223 ...

  7. Java虚拟机工作原理详解

    原文地址:http://blog.csdn.net/bingduanlbd/article/details/8363734 一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了 ...

  8. 10分钟看懂, Java NIO 底层原理

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 写在前面 ...

  9. 【struts2+hibernate+spring项目实战】java监听器实现权限控制系统和资源获取优化(ssh)

    一.权限控制系统 权限控制系统即用户登录后,如果操作了不能访问的操作,系统将其拦截. 权限控制系统设计需求: 系统功能并不是所有功能都需要被控制,例如登录功能无需校验 设计方案:资源中没有出现的功能将 ...

最新文章

  1. js生日计算年龄_用T-SQL计算明细年龄问题.
  2. 60款很酷的 jQuery 幻灯片演示和下载
  3. ObjectDataSource自定义分页
  4. python管道_python 多进程之管道实例(模板)
  5. NLP学习—13.Seq2eq在机器翻译中的实战(bleu指标的代码实现)
  6. 【思想落地】一文分享Qt界面的设计与开发
  7. mysql富文本_mysql模糊查询富文本的文本内容
  8. 互联网酒店预订系统的业务流程图-2
  9. 盘点那些Wifi破解姿势(2)
  10. 武汉大学计算机学院李明,第一届CSIG全国SLAM技术论坛成功举办
  11. 怎么对接个人收款支付接口(扫码支付)
  12. Christian band介绍
  13. 贪心——Greedy
  14. 自动驾驶系列(一) - 自动驾驶系统涉及哪些技术
  15. 腾讯云微搭入选国际权威研究机构Forrester《2021年低代码平台中国市场现状分析报告》
  16. 古人对梦的解释_梦见古人如何解释梦意_周公解梦梦到古人如何解释梦意是什么意思_做梦梦见古人如何解释梦意好不好...
  17. android 动态注册sdcard插播事件监听器
  18. Apr.11st 数字图像处理连载(02)
  19. 天兔oracle,Lepus_天兔的安装
  20. 工程项目部质量管理体系的控制要点分析

热门文章

  1. 差速齿轮原理_差速器和差速锁的区别
  2. linuxweb服务器域名网站,linux web服务器目录
  3. 研华自动驾驶计算机,ADVANTECH研华TPC-1582H-433BE 工业平板电脑一体机计算机工控机...
  4. janusgraph整合mysql_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构
  5. Node.js webpack vue组件
  6. Flink 端到端一致性
  7. opencv-api convexityDefects
  8. pillow api
  9. flask-alchemy-pagination
  10. hadoopstreaming