In some cases, we need an one-to-many relationship between objects. If one object is modified, its dependent objects are to be notified automatically.
Intent
Defines a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
Implementation
1
2
3
4
5
6
publicinterface{
voidregisterObserver(Observer o);
voidremoveObserver(Observer o);
voidnotifyObservers();
}
1
2
3
4
// Observer.java
publicinterfaceObserver{
voidupdate(Data data);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// WeatherData.java
publicclassWeatherDataimplements{
publicWeatherData(){
observers = new LinkedList<>();
}
publicvoidsetData(Data data){
this.data = data;
notifyObservers();
}
publicvoidregisterObserver(Observer o){
observers.add(o);
}
publicvoidremoveObserver(Observer o){
int i = observers.indexOf(o);
if (i>=0) {
observers.remove(i);
}
}
publicvoidnotifyObservers(){
for(Observer observer : observers) {
observer.update(data);
}
}
private List<Observer> observers;
private Data data;
}
Note: Java has built-in classes/interfaces to facilitate the Observer Pattern. Check out java.util.Observer and java.util.Observable for more information.
近期评论