java监听器的原理与实现

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

(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监听器(Listener)是一种事件驱动的编程模式,用于在发生特定事件时自动触发相关的处理操作。监听器实现需要以下几个步骤: 1. 定义监听器接口:定义一个接口,包含要监听的事件类型及对应的处理方法,例如: ```java public interface MyListener { public void onEvent(Event e); } ``` 2. 实现监听器接口:实现定义的接口,实现对应的处理方法,例如: ```java public class MyListenerImpl implements MyListener { public void onEvent(Event e) { // 处理事件逻辑 } } ``` 3. 注册监听器:在需要监听事件的对象中,注册监听器,例如: ```java MyListener listener = new MyListenerImpl(); myObject.addMyListener(listener); ``` 4. 触发事件:在需要触发事件的地方,创建事件对象,调用监听器的处理方法,例如: ```java Event e = new Event(); myObject.notifyMyListener(e); ``` Java监听器原理是基于观察者模式(Observer Pattern),观察者模式是一种对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。在Java中,被观察者对象维护一个观察者列表,在状态改变时,遍历观察者列表,调用观察者的更新方法。监听器就是观察者的一种实现方式,被观察者对象的状态改变就对应着某个事件的发生,观察者就是对应的监听器。通过监听器实现了对象间的解耦,使得程序更加灵活和可扩展。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值