欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Listener 监听器设计模式

程序员文章站 2022-05-01 13:02:05
...

监听器原理

监听器对象:
(1)事件:用户对组件的一个操作,或者说程序执行某个方法,称之为一个事件,如增删改查操作。
(2)事件源:发生事件的组件就是事件源,也就是被监听的对象,如用户进行增删改查操作时,用户可以看作一个事件源。
(3)监听器(处理器):监听并负责处理事件的方法,如用户进行增删改查操作时,在用户进行某个操作前后做出相应的动作,或者获取用户的状态。
执行顺序:
1、给事件源注册监听器。
2、事件源触发事件。
3、事件源产生一个相应的事件对象,并把此对象传递给与之关联的事件处理器。
4、监听器启动,并执行相关的代码来处理该事件。

模拟监听器实现

实现用户发生CRUD事件时,监听事件发生后,返回相应事件消息。
事件接口

package com.javaweb.listener.events;

import com.javaweb.listener.listenerable.IListenerable;

public interface ICurdEvent {

	String C_EVENT ="create event";
	String R_EVENT ="retrieve event";
	String U_EVENT ="uodate event";
	String D_EVENT ="delete event";
	//获取事件对象
	IListenerable getEventSource();
	//获取事件类型
	String getEventType();
}

事件实现类

package com.javaweb.listener.events;

import com.javaweb.listener.listenerable.IListenerable;
//事件类
public class CurdEvent implements ICurdEvent {

	private IListenerable eventSource;//事件源
	private String methodName;//事件执行的类型
	
	public CurdEvent(IListenerable eventSource,String methodName) {
		super();
		this.eventSource = eventSource;
		this.methodName  = methodName;
	}

	@Override
	public IListenerable getEventSource() {
		return eventSource;
	}
	//根据事件源所执行的方法返回响应的事件的类型
	@Override
	public String getEventType() {
		String eventType = null;
		if(this.methodName.startsWith("save")){
			eventType = C_EVENT;
		}else if(this.methodName.startsWith("delete")){
			eventType = D_EVENT;
		}else if(this.methodName.startsWith("update")){
			eventType = U_EVENT;
		}else if(this.methodName.startsWith("find")){
			eventType = R_EVENT;
		}else{
			eventType = "have no event type";
		}
		return eventType;
	}

}

事件源接口

package com.javaweb.listener.listenerable;

import com.javaweb.listener.events.ICurdEvent;
import com.javaweb.listener.listeners.IListener;

//事件源接口
public interface IListenerable {
	//注册监听器
	void setListener(IListener Listener);
	//触发监听器
	void tiggerListener(ICurdEvent event);
}

事件源实现类
可以添加业务逻辑,对业务逻辑进行监听。

package com.javaweb.listener.listenerable;

import com.javaweb.listener.events.ICurdEvent;
import com.javaweb.listener.listeners.IListener;

public class Some implements IListenerable {
	private IListener Listener;
	
	@Override
	public void setListener(IListener Listener) {
		this.Listener = Listener;
	}

	@Override
	public void tiggerListener(ICurdEvent event) {
		Listener.handle(event);
	}

}

监听器接口

package com.javaweb.listener.listeners;

import com.javaweb.listener.events.ICurdEvent;

//监听器接口
public interface IListener {
	//处理事件
	void handle(ICurdEvent event);
}

监听器实现类

package com.javaweb.listener.listeners;

import com.javaweb.listener.events.ICurdEvent;
//定义监听类
public class CurdListener implements IListener {

	@Override
	public void handle(ICurdEvent event) {
		String eventType = event.getEventType();
		if(ICurdEvent.C_EVENT.equals(eventType)){
			System.out.println("事件源执行了添加操作");
		}else if(ICurdEvent.D_EVENT.equals(eventType)){
			System.out.println("事件源执行了删除操作");
		}else if(ICurdEvent.R_EVENT.equals(eventType)){
			System.out.println("事件源执行了查找操作");
		}else if(ICurdEvent.U_EVENT.equals(eventType)){
			System.out.println("事件源执行了更新操作");
		}
	}

}

test

package com.javaweb.listener.test;

import com.javaweb.listener.events.CurdEvent;
import com.javaweb.listener.events.ICurdEvent;
import com.javaweb.listener.listenerable.IListenerable;
import com.javaweb.listener.listenerable.Some;
import com.javaweb.listener.listeners.CurdListener;
import com.javaweb.listener.listeners.IListener;

public class MyTest {

	public static void main(String[] args) {
		//定义监听器
		IListener listener = new CurdListener();
		//定义事件源
		IListenerable some = new Some();
		//定义事件对象
		ICurdEvent event = new CurdEvent(some, "saveStudent");
		//注册事件
		some.setListener(listener);
		//触发事件
		some.tiggerListener(event);
	}
	
}

相关标签: Listener