观察者模式定义了对象间的⼀种⼀对多的依赖关系,当⼀个对象的状态发⽣改变时,所有依赖于它的对象都将得到通知,并⾃动更新
观察者模式属于⾏为型模式,⾏为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯
例如⽣活中,我们可以⽤报纸期刊的订阅来形象的说明,当你订阅了⼀份报纸,每天都会有⼀份最新的报纸送到你⼿上,有多少⼈订阅报纸,报社就会发多少份报纸
报社和订报纸的客⼾就形成了⼀对多的依赖关系
实现代码如下:
被观察者模式
观察者:
使用代码如下:
上述代码中,观察者主动申请加⼊被观察者的列表,被观察者主动将观察者加⼊列表
发布-订阅是⼀种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。⽽是将发布的消息分为不同的类别,⽆需了解哪些订阅者(如果有的话)可能存在
同样的,订阅者可以表达对⼀个或多个类别的兴趣,只接收感兴趣的消息,⽆需了解哪些发布者存在
实现代码如下:
发布者代码如下:
订阅者代码如下:
使用代码如下:
上述代码,发布者和订阅者需要通过发布订阅中⼼进⾏关联,发布者的发布动作和订阅者的订阅动作相互独⽴,⽆需关注对⽅,消息派发由发布订阅中⼼负责
两种设计模式思路是⼀样的,举个⽣活例⼦:
上述过程中,如果公司⾃⼰去管理快递的配送,那公司就会变成⼀个快递公司,业务繁杂难以管理,影响公司⾃⾝的主营业务,因此使⽤何种模式需要考虑什么情况两者是需要耦合的
两者区别如下图: