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