通常最简单粗暴的方法是直接依赖其他模块,调用模块相应方法,但这样会带来一些问题:
下面的例子参考了 事件驱动编程
举个例子:比如在购物网站,通常客户订单提交后,需要进行订单支付以及一些其他的业务处理,如发邮件通知客户下单成功等操作。 下面就这经典的购物网站下订单为例,探讨关于代码的编程设计几种思路:
订单模块直接依赖支付服务模块及用户服务模块,调用各模块的相应实现方法。由于模块间相互依赖,后期修改下订单逻辑时,则需要修改提交订单的代码,某些时候考虑到业务稳定性可能无法立即修改,也可能涉及到多处操作。
通过观察者模式来进行解耦,当被观察对象发生变化时,通知其观察者。观察者监听到相应的事件,由观察者实现相应的处理。体现在订单逻辑时:定义多个观察者观察下订单这个主题,当下订单的动作发生时,通知其所有观察者,再由每个观察者进行处理。
虽然观察者模式对源代码进行了解耦,但是还是有一些不足:
EventBus 是对于监听者模式的实现,通过 EventBus 事件总线来实现。 使用 EventBus 来实现监听者模式,只需要三步操作:
感谢: 事件驱动编程 作者提供的思路,自己只是稍加进行了整理。
来源: https://juejin.im/post/5a3522dd518825404d51d1e1