package com.java.netty.event;
/**
* 業(yè)務(wù)事件定義
* @author hejian
*
*/
public class BusinessEvent {
//具體的業(yè)務(wù)事件內(nèi)容
private Object businessData;
//業(yè)務(wù)事件類(lèi)型
private String businessEventType;
public BusinessEvent(String businessEventType, Object businessData) {
this.businessEventType = businessEventType;
this.businessData = businessData;
}
//獲取具體業(yè)務(wù)事件內(nèi)容
public Object getBusinessData() {
return businessData;
}
//獲取業(yè)務(wù)事件類(lèi)型
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;
/**
* 業(yè)務(wù)事件容器
*
* @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;
}
/**
* 注冊(cè)業(yè)務(wù)事件
*
* @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);
}
/**
* 取消注冊(cè)業(yè)務(wù)事件
*
* @param BusinessEventType
* @param listener
*/
public boolean removeBusinessEventListener(String businessEventType, BusinessEventListener listener) {
//獲取業(yè)務(wù)事件list
List<BusinessEventListener> listeners = LISTENER.get(businessEventType);
if (null != listeners) {
//移除當(dāng)前業(yè)務(wù)事件
return listeners.remove(listener);
}
return Boolean.FALSE;
}
//獲取業(yè)務(wù)事件監(jiān)聽(tīng)器隊(duì)列
public List<BusinessEventListener> getBusinessEventListeners(String BusinessEventType) {
return LISTENER.get(BusinessEventType);
}
}
/**
* 業(yè)務(wù)事件定義
* @author hejian
*
*/
public interface BusinessEventListener {
/**
* 事件接口定義 client需要實(shí)現(xiàn)業(yè)務(wù)事件接口
* @param event
*/
public void execute(BusinessEvent event);
}
import java.util.List;
public class BusinessEventNotify {
private BusinessEventContainer container;
public BusinessEventNotify(BusinessEventContainer container) {
this.container = container;
}
//事件派發(fā)
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("激活", "激活事件內(nèi)容");
BusinessEvent event2 = new BusinessEvent("讀寫(xiě)", "讀寫(xiě)事件內(nèi)容");
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( "執(zhí)行事件回調(diào) :" + event.getBusinessData());
}
}
class Listener2 implements BusinessEventListener {
@Override
public void execute(BusinessEvent event) {
System.out.println("執(zhí)行事件回調(diào) :" + event.getBusinessData());
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者