1. 程式人生 > >觀察者模式--設計模式

觀察者模式--設計模式

觀察者模式(Observer Pattern):定義物件之間的一種一對多依賴關係,
使得每當一個物件狀態發生改變時,其相關依賴物件皆得到通知並被自動更新。這裡寫圖片描述
Subject(目標):目標又稱為主題,它是指被觀察的物件。在目標中定義了一個觀察者集合,一個觀察目標可以接受任意數量的觀察者來觀察,它提供一系列方法來增加和刪除觀察者物件,同時它定義了通知方法notify()。目標類可以是介面,也可以是抽象類或具體類。

ConcreteSubject(具體目標):具體目標是目標類的子類,通常它包含有經常發生改變的資料,當它的狀態發生改變時,向它的各個觀察者發出通知;同時它還實現了在目標類中定義的抽象業務邏輯方法(如果有的話)。如果無須擴充套件目標類,則具體目標類可以省略。

Observer(觀察者):觀察者將對觀察目標的改變做出反應,觀察者一般定義為介面,該介面聲明瞭更新資料的方法update(),因此又稱為抽象觀察者

觀察者模式描述瞭如何建立物件與物件之間的依賴關係,以及如何構造滿足這種需求的系統。觀察者模式包含觀察目標和觀察者兩類物件,一個目標可以有任意數目的與之相依賴的觀察者,一旦觀察目標的狀態發生改變,所有的觀察者都將得到通知。作為對這個通知的響應,每個觀察者都將監視觀察目標的狀態以使其狀態與目標狀態同步,這種互動也稱為釋出-訂閱(Publish-Subscribe)

3.適用場景
在以下情況下可以考慮使用觀察者模式:
(1) 一個抽象模型有兩個方面,其中一個方面依賴於另一個方面,將這兩個方面封裝在獨立的物件中使它們可以各自獨立地改變和複用。
(2) 一個物件的改變將導致一個或多個其他物件也發生改變,而並不知道具體有多少物件將發生改變,也不知道這些物件是誰。
(3) 需要在系統中建立一個觸發鏈,A物件的行為將影響B物件,B物件的行為將影響C物件……,可以使用觀察者模式建立一種鏈式觸發機制。