您的位置:首页 > 编程语言 > Java开发

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

2015-03-13 14:17 357 查看
所谓观察者模式,是指当主题(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;

@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}

@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}

@Override
public 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);
}

@Override
public void update() {
System.out.println(subject.getState());
}

}

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

在实际工作中如何运用模式,是我们学习模式的本意。但是我对于模式的运用还停留在书本的例子上,希望大家探讨如何应用模式到我们具体的工作场景中去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 设计模式