事件总线(event bus)的本质是观察者模式。其优点有:解耦,依赖反转,反转控制,好莱坞原则;高性能,天生多线程;易维护,随时增加修改;符合自然思维,一件事情发生引发另一件事。
Leb是一个极其轻量级的event bus框架,简单易用,下面的这个HelloWorld基本概括了leb的全部用法,够简单吧。
public class Say { @Observe(hint = "say") public void sayHello() { Logs.p("hello leb"); } @Observe(hint = "say") public void sayTo(String who) { Logs.p("hello " + who); } @Observe public void bye() { Logs.p("bye leb"); } @Observe(hint = "say") public void sayTime(Date date) { Logs.p(Times.format(date)); } }
如下是测试代码:
Lebs leb = Lebs.singleton(); leb.observers(new Say()); leb.notice("say");// hello leb leb.notice("say", "bruce");// hello bruce leb.notice("bye");// bye leb leb.notice("say", new Date());// 2013-05-19 13:53:16.016 leb.broadcast("say", 1);// 不执行任何方法,没有匹配上的参数
Say.java是一个普通的POJO,并在相应的监听方法上加上@Observe注解。将Say的实例注册到Lebs中,之后便可以通过总线发送消息,相应的@Observe便会处理。
在后续的版本中,将提供与guice和spring的集成,下图是Leb的架构,非常简单。
源代码:
Github Leb https://github.com/bruce-sha/leb
Github Sardine https://github.com/bruce-sha/sardine
JDK7编译好的包: