zoukankan      html  css  js  c++  java
  • JAVA : 简单event机制的实现(伪码)

    <S> 
    public interface EventBase<S> {
    void onEvent(S source, Object[]... arguments);
    }
    <S,T extends EventBase<S>>
    public class EventSender<S, T> {
    private List<T> receivers = new ArrayList<T>();
    public void addReceiver(T receiver) {
    if (null == receiver) 
    throw new RuntimeException("Can't add null as receiver");
    this.receivers.add(T);
    }
    public void removeReceiver(T receiver) {
    if(this.receivers.contains(receiver)) {
    this.receivers.remove(receiver);
    }
    }
    public void triggerEvent(S source, Object[]... arguments) {
    for(T receiver : this.receivers) {
    receiver.onEvent(source, arguments);
    }
    }
    }
    //declare the event 
    <S>
    public interface OnLoadEvent<S> extends EventBase<S {
    }
    //test class
    public MyEntityObj {
    //use the event in the class
    public EventSender<MyEntityObj, OnLoadEvent<MyEntityObj>> onLoad() {
    return onLoadEvent;
    }
    private EventSender<MyEntityObj, OnLoadEvent<MyEntityObj>> onLoadEvent = new ....;
    private void someMethod() {
    //do something
    this.onLoad().triggerEvent(this, "This is a test", 100);
    }
    }
    //receiver class
    public class SimpleReceiver {
    MyEntityObj obj;
    class myOnLoadHandler implements OnLoadEvent<SimpleReceiver> {
    void onEvent(S source, Object[]... arguments){
    //print something here when receive the event
    }
    }
    public void init() {
    //register event
    obj.onLoad().addReceiver(new myOnLoadHandler());
    }
    }
  • 相关阅读:
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Senior Software Engineer
    Linux日期时间显示输出
    Redis性能优化
    Can't use Subversion command line client: svn
    redis常用性能分析命令
    Linux下配置tomcat + apr + native应对高并发
    Tomcat7并发和线程数
    mongodb常用命令小结
    Spring MVC @PathVariable被截断
  • 原文地址:https://www.cnblogs.com/sliencer/p/2410891.html
Copyright © 2011-2022 走看看