举个很简单的例子: 对于关注了薯条老师的微信公众号的用户来说,公众号与关注者就是多对一的依赖关系,当公众号推文成功时,所有关注者都会收到这条推文消息。
观察者模式解决了被观察者对象和观察者对象的紧耦合问题,也即,如果不使用观察者模式,通常的实现是将状态耦合在观察者对象的内部。
发布订阅模式是对观察者模式的推广,在主题和观察者之间引入了一个中间层。有了中间层以后,主题的状态一旦变更,消息被直接发送给中间层,而非观察者。在实际开发中,通常使用消息队列来做发布订阅模式中的中间层。
观察者模式定义了对象间的一种一对多的依赖关系。
观察者的四种角色:
(4) Concrete Observer:具体的观察者子类,实现抽象观察者的抽象接口,当主题状态变更时,
(1) 定义一个名为公众号的抽象主题类该抽象基类包含三个抽象接口:
(3) 定义一个抽象观察者类User该抽象基类包含一个抽象接口:
self.__name = name