【設計模式學習筆記】觀察者模式
阿新 • • 發佈:2018-12-16
觀察者模式,提供了一種實時監聽方案。定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。[菜鳥]
文章目錄
當我們的流水線,每生產一輛車,我們都要記錄並檢驗這輛車。
這裡的記錄員和質檢員就是觀察者。生產線則是被觀察者。當被觀察者變化時,就要通知其依賴的這些記錄員和質檢員。
1.1 被觀察者
package observer;
import java. util.Observable;
public class Beltline extends Observable {
public void productCar(String carName) {
System.out.println("start producting car");
super.setChanged();
super.notifyObservers(carName);
}
}
這裡我們直接繼承了java util包中的Observable類。這個類中定義了一個Vector集合用於存放所有的觀察者。提供addObserver(Observer o) 方法用於新增觀察者。注意Observer是個介面當我們定義觀察者類的時候需要實現它。
我們使用super.notifyObservers(carName);
用於通知所有的觀察者。這個方法是執行緒同步的。當觀察者較多時還是很耗時的。
1.2 觀察者
package observer;
import java.util.Observable;
import java.util.Observer;
public class CheckCar implements Observer{
@Override
public void update(Observable o, Object arg) {
System.out.println("check the car named : " +arg);
}
}
1.3 測試
package observer;
public class Test {
public static void main(String[] args) {
Beltline beltline = new Beltline();
beltline.addObserver(new CheckCar());
beltline.addObserver(new RecordCar());
beltline.productCar("BWM");
beltline.productCar("Benz");
beltline.productCar("five edges great light");
}
}
1.4 結果
參考
【菜鳥教程】:http://www.runoob.com/design-pattern/observer-pattern.html