设计模式学习(一)观察者模式

来源:互联网 发布:跳跳软件 编辑:程序博客网 时间:2024/05/17 04:41

所谓观察者模式,是指当主题(subject)发生变化的时候,自动的将变化通知给关心主题变化的观察者(observer),这里的观察者一般是多个。

《Head First Design Patterns》给出的定义是:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。

英文原文是:Observer defines an one-to-many dependency between objects so that one object changes state,all of its dependents are notified and updated automatically.

观察者模式的类图为:


代码实现:

package patterns.observer;public interface Subject {public void registerObserver(Observer observer);public void removeObserver(Observer observer);public void notifyObservers();}

package patterns.observer;public interface Observer {public void update();}

package patterns.observer.impl;import java.util.ArrayList;import java.util.List;import patterns.observer.Observer;import patterns.observer.Subject;public class ConcreteSubject implements Subject {private List<Observer> observers = new ArrayList<Observer>();private int state = 0;@Overridepublic void registerObserver(Observer observer) {observers.add(observer);}@Overridepublic void removeObserver(Observer observer) {observers.remove(observer);}@Overridepublic void notifyObservers() {for(Observer observer : observers) {observer.update();}}public int getState() {return state;}public void setState(int state) {this.state = state;notifyObservers();}}

package patterns.observer.impl;import patterns.observer.Observer;public class ConcreteObserver implements Observer {private ConcreteSubject subject;public ConcreteObserver(ConcreteSubject subject) {this.subject = subject;subject.registerObserver(this);}@Overridepublic void update() {System.out.println(subject.getState());}}

在JDK中提供类似的接口和类:java.util.Observable类(对应Subject)和java.util.Observer接口。一般来讲,如果我们需要只需要扩展这些接口即可。

在实际工作中如何运用模式,是我们学习模式的本意。但是我对于模式的运用还停留在书本的例子上,希望大家探讨如何应用模式到我们具体的工作场景中去。


0 0