package com.java.netty.event;
/**
* 业务事件定义
* @author hejian
*
*/
public class BusinessEvent {
//具体的业务事件内容
private Object businessData;
//业务事件类型
private String businessEventType;
public BusinessEvent(String businessEventType, Object businessData) {
this.businessEventType = businessEventType;
this.businessData = businessData;
}
//获取具体业务事件内容
public Object getBusinessData() {
return businessData;
}
//获取业务事件类型
public String getBusinessEventType() {
return businessEventType;
}
}
package com.java.netty.event;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 业务事件容器
*
* @author hejian
*
*/
public class BusinessEventContainer {
private static final Map<String, List<BusinessEventListener>> LISTENER = new HashMap<String, List<BusinessEventListener>>();
private BusinessEventContainer() {
}
static class BusinessEventHanler {
private static BusinessEventContainer businessEventContainer = new BusinessEventContainer();
}
public static BusinessEventContainer init() {
return BusinessEventHanler.businessEventContainer;
}
/**
* 注册业务事件
*
* @param businessEventListener
*/
public void addBusinessEventListener(BusinessEvent event,BusinessEventListener listener) {
List<BusinessEventListener> listeners = LISTENER.get(event.getBusinessEventType());
if(null == listeners) {
listeners = new ArrayList<BusinessEventListener>();
}
listeners.add(listener);
LISTENER.put(event.getBusinessEventType(), listeners);
}
/**
* 取消注册业务事件
*
* @param BusinessEventType
* @param listener
*/
public boolean removeBusinessEventListener(String businessEventType, BusinessEventListener listener) {
//获取业务事件list
List<BusinessEventListener> listeners = LISTENER.get(businessEventType);
if (null != listeners) {
//移除当前业务事件
return listeners.remove(listener);
}
return Boolean.FALSE;
}
//获取业务事件监听器队列
public List<BusinessEventListener> getBusinessEventListeners(String BusinessEventType) {
return LISTENER.get(BusinessEventType);
}
}
/**
* 业务事件定义
* @author hejian
*
*/
public interface BusinessEventListener {
/**
* 事件接口定义 client需要实现业务事件接口
* @param event
*/
public void execute(BusinessEvent event);
}
import java.util.List;
public class BusinessEventNotify {
private BusinessEventContainer container;
public BusinessEventNotify(BusinessEventContainer container) {
this.container = container;
}
//事件派发
public void call(BusinessEvent businessEvent) {
if(businessEvent == null) {
return;
}
List<BusinessEventListener> eventListeners = container.getBusinessEventListeners(businessEvent.getBusinessEventType());
if(!eventListeners.isEmpty()) {
eventListeners.forEach((e) -> {
e.execute(businessEvent);
});
}
}
}
package com.java.netty.event;
public class TestEvent {
public static void main(String[] args) {
BusinessEvent event1 = new BusinessEvent("激活", "激活事件内容");
BusinessEvent event2 = new BusinessEvent("读写", "读写事件内容");
BusinessEventContainer.init().addBusinessEventListener(event1, new Listener1());
BusinessEventContainer.init().addBusinessEventListener(event2, new Listener2());
new BusinessEventNotify(BusinessEventContainer.init()).call(event1);
new BusinessEventNotify(BusinessEventContainer.init()).call(event2);
}
}
class Listener1 implements BusinessEventListener {
@Override
public void execute(BusinessEvent event) {
System.out.println( "执行事件回调 :" + event.getBusinessData());
}
}
class Listener2 implements BusinessEventListener {
@Override
public void execute(BusinessEvent event) {
System.out.println("执行事件回调 :" + event.getBusinessData());
}
}