设计模式学习(三)——观察者模式

来源:互联网 发布:linux命令是否进行安装 编辑:程序博客网 时间:2024/05/21 10:52

参考书——《HeadFirst设计模式》


主题(subject)+观察者(observer)=观察者模式——解释:主题对象管理某些数据,观察者已经订阅主题。当主题内的数据改变,就会通知观察者。

观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。


在最基础的观察者模式中,包括以下四个角色:

  • 被观察者有一个用来存放观察者对象的容器,这个容器是被观察者类的核心,另外还有三个方法:addObserver方法是向这个容器中添加观察者对象;deleteObserver方法是从容器中移除观察者对象;notifyObserver方法是依次调用观察者对象的对应方法。这个角色可以是接口,也可以是抽象类或者具体的类。
  • 观察者观察者角色一般是一个接口,它只有一个update方法,在被观察者状态发生变化时,这个方法就会被触发调用。
  • 具体的被观察者使用这个角色是为了便于扩展,可以在此角色中定义具体的业务逻辑。
  • 具体的观察者观察者接口的具体实现,在这个角色中,将定义被观察者对象状态发生变化时所要处理的逻辑。

======================================================================================================

这个设计模式不难,以下是关于观察者模式的一些周边讨论~

1.在设计具体观察者时

public class ConcreteObserver implements ObserverI {private ConcreteObservable observable;public ConcreteObserver(ConcreteObservable observable){this.observable = observable;observable.addObserver(this);}

为什么要保存ConcreteObservable的引用呢?解释:这样做的是为了当想要不再是观察者时,如果已经有了对ConcreteObservable的引用会比较方便。P.s:这里也可以理解为是一种回调。详细参考:http://hellosure.iteye.com/blog/1130176


2.典型的观察者模式,被观察者者是将信息“推”送给观察者的。这种方式有好有坏,可以根据具体情况,让被观察者提供一些公开的getter方法,让观察者“拉”走一些自己所需的信息。

3.还可以使用java内置的观察者模式  http://www.oschina.net/code/explore/jdk16/java/util/Observable.java




0 0
原创粉丝点击