【Java】一个最简单的事件总线实现

#一个最简单的事件总线实现

MicroBus

##使用

注册

class Receiver implements MicroBus.BusEventReceiver {

    public onCreate() {
        bus.register(this, String.class);
    }

    public onDestroy() {
        bus.unregister(this, String.class);
    }

    @Override
    public void onBusEvent(Object event) {
        if (event instanceof String)
            System.out.println("Hello, " + event);
    }
}

运行

bus.post("World|");

运行结果

Hello, World!

##大致原理

使用一个队列来保存所有的注册对象,一旦有新事件产生,就遍历这个队列,找到对此事件感兴趣的注册对象,并执行相应的动作。

不过这个实现并不能适用于生产环境,也缺乏对多线程以及线程调度的支持,但是很适合理解设计原理。

##后记

通常的观察者模式有个问题,就是业务对象依旧是直接通信,一旦通信数量骤增,那么相互的依赖关系就会陷入难以整理的网状结构。

“事件” 本身就是 “消息”,总线只不过是将业务对象之间的直接消息通信转移到总线统一调度的消息通信上而已,使用单点通信来取代网状通信,降低消息管理的复杂度。

同时,使用消息取代显式的接口,消息可以有统一的格式,统一的格式意味着可以方便的制定协议,也就意味这可以在更广泛的范围传递,这对分布式应用是大有裨益的。

另一个好处就是,可以更方便的实现异步处理,不论是发布事件还是接收事件,都可以等到有在所有的条件都准备完全之后,再由事件总线来调度,避免无谓的阻塞。

转载于:https://my.oschina.net/xesam/blog/406482

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值