标签:
观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变的时候,所有依赖于它的对象都得到通知并被自动更新。
观察者类图:
Subject(被观察者)
被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。
ConcreteSubject
被观察者的具体实现。包含一些基本的属性状态及其他操作。
Observer(观察者)
接口或抽象类。当Subject的状态发生变化时,Observer对象将通过一个callback函数得到通知。
ConcreteObserver
观察者的具体实现。得到通知后将完成一些具体的业务逻辑处理。
1.目标和观察者之间的关系:按照模式定义,目标和观察者直接是典型的一对多关系,但是如果观察者只有一个也是可以的。在处理一个对象的状态变化会影响到另一个对象的时候也可以考虑使用此模式。
2.单向依赖:在观察者模式中,观察者和目标是单向依赖的,只有观察者依赖目标,而目标是不会依赖于观察者的。它们之间的主动权掌握在目标手中。
3.实现:具体的目标实现对象要能维护观察者的注册信息,最简单的是采用一个机会来保存观察者的注册信息。 如果是一个观察者观察多个目标,那么在观察者的更新方法里面,需要判断是来自哪一个目标的通知。简单的做法就是扩展update的方法。比如在方法里面多传递一个参数进行区分,还有种更简单的方法就是定义不同的回调方法。
Java中的观察者模式
在java.util包里面有一个类Observable,它实现了大部分我们需要的目标的功能,还有一个接口Observer,它里面定义了update的方法,就是观察者的接口。
标签:
原文地址:http://blog.csdn.net/mqplw/article/details/45368333