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());
    }
    }
  • 相关阅读:
    BZOJ 3189. [Coci2011]Slika
    BZOJ3188. [Coci 2011]Upit
    P4304 [TJOI2013]攻击装置
    P3966 [TJOI2013]单词
    P3964 [TJOI2013]松鼠聚会
    BZOJ 3157: 国王奇遇记
    设计模式--策略模式
    SSM整合步骤
    Mybatis笔记二
    Java调用WebService之Axis实现
  • 原文地址:https://www.cnblogs.com/sliencer/p/2410891.html
Copyright © 2011-2022 走看看