Listener 监听器设计模式

监听器原理

监听器对象:
(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);
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值