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监听器
下一篇: java的监听器实现