guava包EventBus

EventBus是guava对观察者模式的优雅实现。

它实际上是一个基于内存的消息队列,Event Source发送一个消息到EventBus,然后再由EventBus将消息推送到所监听的Listener。解耦了发布者和订阅者,使他们可以不互相了解。

1. 创建Listener

我们可以通过@Subscribe注解将任意的类的方法变为一个Listener。

复制代码
public class SimpleListener {

    @Subscribe
    public void doEvent(final String event){
        System.out.println("SimpleListener receive string "+event);
    }

    @Subscribe
    public void doEvent(final  Integer event){
        System.out.println("SimpleListener receive int "+event);
    }

    @Subscribe
    public void doEvent(final  Record event){
        System.out.println("SimpleListener receive record "+event);
    }
}
复制代码

再创建一个Listener

public class ComplexListener {
    @Subscribe
    public void doEvent(final  Record event){
        System.out.println("ComplexListener receive record "+event);
    }
}

2.event类型

event既可以是java原生类型Integer,String,也可以自定义。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Record {
    private Integer id;
    private String name;
}

3.注册Listener

复制代码
public class EventBusExample {
    public static void main(String[] args) {
        EventBus eventBus = new EventBus();
        eventBus.register(new SimpleListener());
        eventBus.register(new ComplexListener());
        
        eventBus.post(" a event");
        eventBus.post(1);
        eventBus.post(new Record(1, "miao"));
    }
}
复制代码

输出:

SimpleListener receive string  a event
SimpleListener receive int 1
SimpleListener receive record Record(id=1, name=miao)
ComplexListener receive record Record(id=1, name=miao)

 

posted @   Mars.wang  阅读(196)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示