观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。
图1:观察者模式
代码实现:
1. Observer接口
public interface Observer {
void watch(String message);
}
2. Subject接口
package cn.lettoo.observe;
public interface Subject {
void addObserver(Observer observer);
void deleteObserver(Observer observer);
void notifyObservers();
}
3. Observer实现类A:
package cn.lettoo.observe;
public class ObserverA implements Observer {
@Override
public void watch(String message) {
System.out.println(String.format("This is observer A watching the message: %s", message));
}
}
4. ObserverB,代码略
5. SubjectA实现Subject接口:
package cn.lettoo.observe;
import java.util.HashSet;
import java.util.Set;
public class SubjectA implements Subject {
Set<Observer> observers = new HashSet<Observer>();
@Override
public void addObserver(Observer observer) {
observers.add(observer);
}
@Override
public void deleteObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.watch("MessageA");
}
}
}
6. 调用代码:
package cn.lettoo.observe;
public class Client {
public static void main(String[] args) {
Observer a = new ObserverA();
Observer b = new ObserverB();
Subject subject = new SubjectA();
subject.addObserver(a);
subject.addObserver(b);
subject.notifyObservers();
}
}
运行结果
This is observer A watching the message: MessageA
This is observer B watching the message: MessageA
This is observer B watching the message: MessageA