被觀察對象內保存全部觀察者信息,被觀察對象更新時通知每個觀察者對象。
代碼如下:
//觀察者 接口
public interface Observer {
public void update(Subject subject);
}
//觀察者實現類
public class MyObserverA implements Observer{
@Override
public void update(Subject subject) {
System.out.println("a is updated");
}
}
public class MyObserverB implements Observer{
@Override
public void update(Subject subject) {
System.out.println("b is updated");
}
}
//被觀察者
public class Subject {
private static Vector obs = new Vector();
//註冊觀察者
public static void attach(Observer ob){
obs.add(ob);
}
//解除與註冊者關聯
public static void dettach(Observer ob){
obs.remove(ob);
}
//操作
public void operatio(){
//執行操作
//通知所有觀察者
Enumeration elements = obs.elements();
while(elements.hasMoreElements()){
elements.nextElement().update(this);
}
}
}
//測試
public class Client {
public static void main(String[] args) {
Subject.attach(new MyObserverA());
Subject.attach(new MyObserverB());
Subject subject = new Subject();
subject.operatio();
}
}