在Generator內需要有把observer加入觀察的method(addObserver)
與通知observer的功能(notifyObserver),而在observer內,會需要有一個update的method
可以在接收到Generator的通知後,到Generator內取到結果,這樣當主體程式有所變化,所有設定的observer都會接收到通知,而做適當的訊息處理
參與者
1.Generator
可以使用Observer的Class
addObserver:把觀察者加進來的method
notifyObserver:用來通知所有observer的method
excute:執行程序,在這類別真正要執行的工作,當工作完成
一定要觸發notifyObserver通知所有的觀察者
getNumber:這是讓Observer接收到通知後,回來取值得method
public abstract class Generator {
private Vector<Observer> observers=new Vector<Observer>();
private int number;
public void addObserver(Observer observer){
observers.add(observer);
}
public void deletObserver(Observer observer){
observers.remove(observer);
}
private void notifyObserver(){
Iterator<Observer> it=observers.iterator();
while(it.hasNext()){
((Observer)it.next()).update(this);
}
}
public void excute(){
Random random=new Random();
number=random.nextInt(50);
notifyObserver();
};
public int getNumber(){
return number;
};
}
2.Observer interface
Observer可能有很多個,先設定一個所有observer需遵循的統一介面
update:當obsever被通知,就是被Generator呼叫了這個updtae method
在這個method內可以利用傳進來的Generator物件,再回去取到變化的值
public interface Observer {
public abstract void update(Generator gen);
}
3.FirstObserver 實作類別
public class FirstObserver implements Observer {
public void update(Generator gen) {
System.out.println("First:"+gen.getNumber());
}
}
4.SecondObserver
public class SecondObserver implements Observer {
public void update(Generator gen) {
System.out.println("Second:"+gen.getNumber());
}
}
5.Main外部程式
只要產生Generator,加入關聯的observer後
就可以執行他要做的動作,同時在這動作內也已經
包含了通知observer的功能
Generator gen=new Generator();
gen.addObserver(new FirstObserver());
gen.addObserver(new SecondObserver());
gen.excute();
沒有留言:
張貼留言