观察者模式

观察者模式的目的就是为了实现松耦合,面对接口编程

在观察者模式里面,有一个实例对象–被观察者(Subject),他维护一套观察者(observer)的结合,这些 Observer 实现相同的接口,subject 只需要知道,通知 Observer 需要调用哪个统一的方法

发布订阅模式

在发布订阅模式里,发布者并不会直接通知订阅者,发布者和订阅者彼此不相识,通过第三方来进行函数调用

发布者 只需要告诉 第三方 我要 发送 的信息是 XXX

订阅者 只需要告诉 第三方 我要 订阅 的消息是 XXX

当 第三方 接收到 发布者 发送的消息且是 XXX 时,就会报消息推送给订阅了 XXX 的 订阅者,当然也有可能是 订阅者 自己过来拿取

在发布订阅模式中,发布者和订阅者不是松耦合,而是完全解耦的

总结

  1. 从表面上看

    观察者模式只有两个角色 观察者被观察者
    发布订阅模式中有三个角色 发布者订阅者第三方

  2. 深层次

    观察者模式 是松耦合关系
    发布订阅模式 是完全不存在耦合

  3. 使用层次

    观察者模式 多用于单个应用内部
    发布订阅模式 更多的是一种跨应用的模式

参考文章
Observer vs Pub-Sub pattern