设计模式19---------观察者模式

观察者模式

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。好比,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。git

介绍

意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,全部依赖于它的对象都获得通知并被自动更新。
主要解决:一个对象状态改变给其余对象通知的问题,并且要考虑到易用和低耦合,保证高度的协做。
什么时候使用:一个对象(目标对象)的状态发生改变,全部的依赖对象(观察者对象)都将获得通知,进行广播通知。
如何解决:使用面向对象技术,能够将这种依赖关系弱化。
关键代码:在抽象类里有一个 ArrayList 存放观察者们。
应用实例: 一、拍卖的时候,拍卖师观察最高标价,而后通知给其余竞价者竞价。 二、西游记里面悟空请求菩萨降服红孩儿,菩萨洒了一地水招来一个老乌龟,这个乌龟就是观察者,他观察菩萨洒水这个动做。
优势: 一、观察者和被观察者是抽象耦合的。 二、创建一套触发机制。
缺点: 一、若是一个被观察者对象有不少的直接和间接的观察者的话,将全部的观察者都通知到会花费不少时间。 二、若是在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能致使系统崩溃。 三、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。
使用场景:一个抽象模型有两个方面,其中一个方面依赖于另外一个方面。将这些方面封装在独立的对象中使它们能够各自独立地改变和复用。一个对象的改变将致使其余一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,能够下降对象之间的耦合度。一个对象必须通知其余对象,而并不知道这些对象是谁。须要在系统中建立一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可使用观察者模式建立一种链式触发机制。
注意事项: 一、JAVA 中已经有了对观察者模式的支持类。 二、避免循环引用。 三、若是顺序执行,某一观察者错误会致使系统卡壳,通常采用异步方式。github

实现

观察者模式使用三个类 Subject、Observer 和 Client。Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法。咱们建立 Subject 类、Observer 抽象类和扩展了抽象类 Observer 的实体类。
ObserverPatternDemo,咱们的演示类使用 Subject 和实体类对象来演示观察者模式。异步

clipboard.png

具体代码放在github,有须要的能够点击连接https://github.com/Hp1512/Lea...spa

相关文章
相关标签/搜索