事件模型demo

作者: 咖啡爷爷 | 来源:发表于2017-09-18 17:12 被阅读0次
  • BusinessEvent
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;
    }
    
}
  • BusinessEventContainer
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);
    }

}
  • BusinessEventListener

/**
 * 业务事件定义
 * @author hejian
 *
 */
public interface BusinessEventListener {
    /**
     * 事件接口定义 client需要实现业务事件接口
     * @param event
     */
    public void execute(BusinessEvent event);
}
  • BusinessEventNotify

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());
    }
}

相关文章

网友评论

    本文标题:事件模型demo

    本文链接:https://www.haomeiwen.com/subject/udmbsxtx.html