今天看github源码时,突然引发一个疑问,什么时候用观察者,什么时候用发布订阅。

有些地方可能会把观察者模式等同于发布订阅模式。这里会有点区别。

  • 观察者模式
    • 类似C#里面的Event,Subject(主题)对应的直接是Observer(观察者)
  • 发布订阅模式
    • 相对于观察者模式,Publisher(发布者)对应的是Subject,Subscriber(订阅者)对应Observer,多了中间层Broker(经纪人)。通俗点就是我们常写的消息管理器,把消息都保存在消息队列里。发布者只需告诉Broker,我要发的消息,topic是AAA;订阅者只需告诉Broker,我要订阅topic是AAA的消息;当Broker收到发布者发过来消息,并且topic是AAA时,就会把消息推送给订阅了topic是AAA的订阅者

看了github上的某些源码,总结是,系统框架内部的,简单的消息回调,用观察者。需要提供给系统外部的消息,用发布订阅。比如,框架的资源加载逻辑,资源加载完毕的消息,通过观察者直接回调给对应的处理逻辑。框架针对网络的封装,网络消息发送后得到的返回,通过发布订阅,进行后续处理。