java监听器的原理与实现
2016-06-12 00:45
573 查看
监听器模型涉及以下三个对象,模型图如下:
(1)事件:用户对组件的一个操作,称之为一个事件
(2)事件源:发生事件的组件就是事件源
(3)事件监听器(处理器):监听并负责处理事件的方法
执行顺序如下:
1、给事件源注册监听器
2、组件接受外部作用,也就是事件被触发
3、组件产生一个相应的事件对象,并把此对象传递给与之关联的事件处理器
4、事件处理器启动,并执行相关的代码来处理该事件。
监听器模式:事件源注册监听器之后,当事件源触发事件,监听器就可以回调事件对象的方法;更形象地说,监听者模式是基于:注册-回调的事件/消息通知处理模式,就是被监控者将消息通知给所有监控者。
1、注册监听器:事件源.setListener;
2、回调:事件源实现onListener。
下面,来看两个demo。
一、简化了上图所示的模型,仅仅包含事件源与监听器
你点击了按钮
二、完整模型的demo
你移动了鼠标
你点击了按钮
(1)事件:用户对组件的一个操作,称之为一个事件
(2)事件源:发生事件的组件就是事件源
(3)事件监听器(处理器):监听并负责处理事件的方法
执行顺序如下:
1、给事件源注册监听器
2、组件接受外部作用,也就是事件被触发
3、组件产生一个相应的事件对象,并把此对象传递给与之关联的事件处理器
4、事件处理器启动,并执行相关的代码来处理该事件。
监听器模式:事件源注册监听器之后,当事件源触发事件,监听器就可以回调事件对象的方法;更形象地说,监听者模式是基于:注册-回调的事件/消息通知处理模式,就是被监控者将消息通知给所有监控者。
1、注册监听器:事件源.setListener;
2、回调:事件源实现onListener。
下面,来看两个demo。
一、简化了上图所示的模型,仅仅包含事件源与监听器
/* * 事件源:事件发生的地点 */ public class EventSource { private IEventListener mEventListener; // 注册监听器 public void setEventListener(IEventListener arg) { mEventListener = arg; } // 触发事件 public void EventHappened() { mEventListener.onclickButton(); } }
/* * 事件监听器,事件处理器 */ public interface IEventListener { void onclickButton(); }
public class Test { public static void main(String[] args) { // 事件源(被监听的对象) EventSource m1 = new EventSource(); // 监听器 IEventListener mEventListener = new IEventListener() { @Override public void onclickButton() { // TODO Auto-generated method stub System.out.println("你点击了按钮"); } }; // 注册监听器到事件源 m1.setEventListener(mEventListener); m1.EventHappened(); } }【实验结果】
你点击了按钮
二、完整模型的demo
/* * 事件 */ public interface IEvent { void setEventListener(IEventListener arg); boolean ClickButton(); boolean MoveMouse(); }
/* * 事件监听器,调用事件处理器 */ public interface IEventListener { void doEvent(IEvent arg); }
/* * 事件源:事件发生的地点 */ public class EventSource implements IEvent{ private IEventListener mEventListener; boolean button; boolean mouse; //注册监听器 @Override public void setEventListener(IEventListener arg){ mEventListener = arg; } //触发事件 public void mouseEventHappened(){ mouse = true; mEventListener.doEvent(this); } @Override public boolean ClickButton() { return button; // TODO Auto-generated method stub } @Override public boolean MoveMouse() { // TODO Auto-generated method stub return mouse; } }
public class EventSource2 implements IEvent { private IEventListener ml; boolean button; boolean mouse; @Override public void setEventListener(IEventListener arg) { ml = arg; } @Override public boolean ClickButton() { // TODO Auto-generated method stub return button; } @Override public boolean MoveMouse() { // TODO Auto-generated method stub return mouse; } // 触发事件 public void buttonEventHappened() { button = true; ml.doEvent(this); } }
public class Test { public static void main(String[] args) { // 事件源(被监听的对象) EventSource m1 = new EventSource(); EventSource2 m2 = new EventSource2(); // 监听器 IEventListener mEventListener = new IEventListener() { @Override public void doEvent(IEvent arg) { if (true == arg.ClickButton()) { System.out.println("你点击了按钮"); }else if(true == arg.MoveMouse()){ System.out.println("你移动了鼠标"); } } }; // 注册监听器到事件源 m1.setEventListener(mEventListener); m1.mouseEventHappened(); // 注册监听器到事件源 m2.setEventListener(mEventListener); m2.buttonEventHappened(); } }【实验结果】
你移动了鼠标
你点击了按钮
相关文章推荐
- Java异常处理,try-catch
- java并发编程(二)-- 线程中断
- Java反射之Field用法
- 如何开发java语言
- java.sql.SQLNonTransientConnectionException异常
- java中的 i++ 和++i
- java获取图片的大小和尺寸
- spring4+springMVC+hibernate4 整合
- [Java][设计模式] 工厂模式一
- Spring 注入bean时的初始化和销毁操作
- springmvc+mybatis+spring 整合
- java引用外部大批量jar包
- Java logback配置
- java 操作属性文件
- 通过Java源码解析,探讨map与hashmap的排序
- Ajax与SpringMVC
- Java异常
- Spring MVC + MyBatis+Maven 零基础搭建Web开发框架(注解模式哦)
- java找jar包的地址
- Swagger与SpringMVC项目整合