1. 程式人生 > >【設計模式學習筆記】觀察者模式

【設計模式學習筆記】觀察者模式

觀察者模式,提供了一種實時監聽方案。定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。[菜鳥]

文章目錄

當我們的流水線,每生產一輛車,我們都要記錄並檢驗這輛車。
這裡的記錄員和質檢員就是觀察者。生產線則是被觀察者。當被觀察者變化時,就要通知其依賴的這些記錄員和質檢員。

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