监听器模型涉及以下三个对象,模型图如下:
(1)事件:用户对组件的一个操作,称之为一个事件 (2)事件源:发生事件的组件就是事件源 (3)事件监听器(处理器):监听并负责处理事件的方法
执行顺序如下:
1、给事件源注册监听器 2、组件接受外部作用,也就是事件被触发 3、组件产生一个相应的事件对象,并把此对象传递给与之关联的事件处理器 4、事件处理器启动,并执行相关的代码来处理该事件。
监听器模式:事件源注册监听器之后,当事件源触发事件,监听器就可以回调事件对象的方法;更形象地说,监听者模式是基于:注册-回调的事件/消息通知处理模式,就是被监控者将消息通知给所有监控者。
1、注册监听器:事件源.setListener; 2、回调:事件源实现onListener。
下面,来看两个demo。
一、简化了上图所示的模型,仅仅包含事件源与监听器
public class EventSource { private IEventListener mEventListener; public void setEventListener(IEventListener arg) { public void EventHappened() { mEventListener.onclickButton();
public interface IEventListener {
public static void main(String[] args) { EventSource m1 = new EventSource(); IEventListener mEventListener = new IEventListener() { public void onclickButton() { // TODO Auto-generated method stub System.out.println('你点击了按钮'); m1.setEventListener(mEventListener);
【实验结果】
你点击了按钮
二、完整模型的demo
public interface IEvent { void setEventListener(IEventListener arg);
public interface IEventListener { void doEvent(IEvent arg);
public class EventSource implements IEvent{ private IEventListener mEventListener; public void setEventListener(IEventListener arg){ public void mouseEventHappened(){ mEventListener.doEvent(this); public boolean ClickButton() { // TODO Auto-generated method stub public boolean MoveMouse() { // TODO Auto-generated method stub
public class EventSource2 implements IEvent { private IEventListener ml; public void setEventListener(IEventListener arg) { public boolean ClickButton() { // TODO Auto-generated method stub public boolean MoveMouse() { // TODO Auto-generated method stub public void buttonEventHappened() {
public static void main(String[] args) { EventSource m1 = new EventSource(); EventSource2 m2 = new EventSource2(); IEventListener mEventListener = new IEventListener() { public void doEvent(IEvent arg) { if (true == arg.ClickButton()) { System.out.println('你点击了按钮'); }else if(true == arg.MoveMouse()){ System.out.println('你移动了鼠标'); m1.setEventListener(mEventListener); m2.setEventListener(mEventListener); m2.buttonEventHappened();
【实验结果】
你移动了鼠标
你点击了按钮
|