今天研究了下观察者模式:
思考了一下MQ订阅发布的原理
1.主题Topic
Topic 有这几个属性 name state;
方法有doService(Object msg);
有一个集合存储订阅该主题的观察者;
有增加集合的方法,即新加订阅者。
doService方法里大致是这样:
判断状态
遍历集合 给集合里的订阅者都执行订阅者的方法,把msg参数传递过去。
发送完毕修改状态。
2.订阅者有一个方法就是从Topic对象里获取msg,并作处理。
由于订阅发布状态不需要关注是否收到,不需要回调用Topic对象回写状态,Topic对象中遍历完毕自动修改状态。
整个流程大体上就是这样。每次需要重新发布的时候就重新调用doService方法。
topic的name可以存储在kahaDB里面对应到具体的实体对象。
getTopic就是从数据库里获取对象进行操作。
创建topic的操作设为单例。
用一个工厂模式获取同一个Topic对象进行后续订阅处理。
我后续把这些伪代码和思路进行落地
写一个可用的demo