diff --git a/src/main/java/com/iflytop/uf/UfEventBus.java b/src/main/java/com/iflytop/uf/UfEventBus.java new file mode 100644 index 0000000..b70aab7 --- /dev/null +++ b/src/main/java/com/iflytop/uf/UfEventBus.java @@ -0,0 +1,52 @@ +package com.iflytop.uf; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +public class UfEventBus { + // 事件回调 + public interface EventCallback { + void callback( Object ... args ); + } + + // singleton instance + private static final UfEventBus instance = new UfEventBus(); + // 事件处理回调 + private final Map> callbacks; + + // get instance + public static UfEventBus getInstance() { + return UfEventBus.instance; + } + + // con + private UfEventBus() { + this.callbacks = new HashMap>(); + } + + // on + public void on( String name, EventCallback callback ) { + if ( !this.callbacks.containsKey(name) ) { + this.callbacks.put(name, new ArrayList()); + } + this.callbacks.get(name).add(callback); + } + + // off + public void off( String name, EventCallback callback ) { + if ( !this.callbacks.containsKey(name) ) { + return ; + } + this.callbacks.get(name).remove(callback); + } + + // emit + public void emit( String name, Object ... args ) { + if ( !this.callbacks.containsKey(name) ) { + return ; + } + for ( EventCallback callback : this.callbacks.get(name) ) { + callback.callback( args ); + } + } +}