消息通知,广播机制,通过注册接收者,观察者发送消息给多个接收者
观察者模式:
当对象间存在一对多关时,则使用观察者模式。比如,当一个对象被修改时,则会自动通知它的依赖对象。
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生该改变时,所有依赖于它的对象都得到通知并被自动更新。
主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。
何时使用:一个对象的状态发生改变,所有的依赖对象都将得到通知,进行广播通知。
如何解决:使用面向对象技术,可以将这种依赖关系弱化。
关键代码:在抽象类里有一个ArrayList存放观察者们。
优点:
1.观察者和被观察者是抽象耦合的。
2.建立一套触发机制。
缺点:
1.如果一个被观察对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
2.如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统奔溃。
3.观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。
角色:
1、抽象主题(Subject):主题需要维持对所有观察者的引用,以便在状态更改时调用观察者接口。每个主题都可以有任何数量的观察者,并可以增加和删除观察者对象。
2、具体主题(Concrete Subject):将有关状态存入具体观察者对象,在具体主题内部状态改变时,给所有订阅过的观察者发送更改通知;
3、抽象观察者(Observer):为所有的具体观察者定义一个接口,在得到主题通知时更新自己;
4、具体观察者(Concrete Observer):实现抽象观察者角色所要求的通知(接收)接口,以便使本身的状态与主题状态协调。
![](https://img.haomeiwen.com/i3498946/c1dc4fce18c22b5e.png)
![](https://img.haomeiwen.com/i3498946/0fa88f4652dedb99.png)
![](https://img.haomeiwen.com/i3498946/7f828c773a8bba7c.png)
网友评论