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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构