观察者模式
观察者模式,英文名Observer Pattern
该模式用于一个对象通知另一个对象,某事件发生
通知的对象扮演的角色叫做主体或被观察者(Subject或Observable)
被通知的对象扮演的角色叫做观察者(Observer)
该模式主要用于事件通知或事件联动类的业务
Observer和Subject之间是解耦合的,仅通过一个通知函数联系起来
实现代码
public class Subject {
List observers = new ArrayList();
public void addObserver(Observer o) {
observers.add(o);
}
public void removeObserver(Observer o) {
observers.remove(o);
}
public void notifyObservers() {
for (Observer o : observers)
o.react();
}
}
public class Observer {
public void react() {
}
}
Java自带的观察者接口
Java内置了两个类,专门用于实现观察者模式
一个是java.util.Observable,代表被观察者,这个类定义了添加观察者,删除观察者,通知观察者的函数
一个是java.util.Observer,代表观察者,这个类定义了处理通知事件的接口
public class Subject extends Observable {
String data;
@Override
public synchronized void addObserver(Observer o) {
super.addObserver(o);
}
public void setData(String data) {
this.data = data;
super.setChanged();
super.notifyObservers(data);
}
}
public class Observer implements java.util.Observer {
@Override
public void update(Observable o, Object obj) {
System.out.println("Data change to " + obj);
}
}
public class APP {
public static void main(String... args) {
Subject subject = new Subject();
Observer observer = new Observer();
subject.addObserver(observer);
subject.setData("Hello");
}
}