觀察者模式 :
定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某個主題物件,這個主題物件在狀態發生變化時會通知所有觀察者物件,使他們能夠自動更新自己。
根據概念,我們知道這個模式由 多個觀察者,乙個被觀察物件組成。觀察者需要將到被觀察物件那裡去註冊自己,或者說被觀察物件儲存著多個觀察者得引用。一旦被觀察物件的狀態發生了變化,那麼它會通知在它這裡註冊了的所有觀察者,而這些觀察者一收到訊息就會自動進行相應的操作。
觀察者模式核心之處在於觀察者和被觀察物件都不知道對方的存在,也就是沒有使用硬編碼的方式將兩者組合在一起。
現在使用程式來實現觀察者模式加深理解:
1. 建立observer 介面,該介面有個 updatestate() 函式宣告。 當被觀察物件狀態改變時,這個updatestate()函式就派上用場 了
2. 建立被觀察物件的抽象類,這個抽象類有 註冊,撤銷註冊,以及發出狀態改變訊息的方法。
3. 建立具體被觀察物件類 server
4. 建立具體觀察者物件: serverobserver 類。在這裡,serverobserver 類主要代表 經理 和普通組員。他們要隨時關注公司伺服器的狀態,一旦伺服器有問題,他們就要採取相應的行動來保證伺服器正常運作。
從**中可以看到,觀察者也不知道自己需要關注哪個具體的被觀察物件。降低了**的耦合性。
5. 建立測試**, server 註冊了兩個觀察者 manager 和 staff 。 一旦server 的狀態發生,馬上呼叫notify() 方法,通知這兩個觀察者。兩個觀察者一接到通知,就有不同的動作。
結果輸出:
observer: manager server state:伺服器崩潰 action is :向上級匯報,並趕回公司
observer: staff server state:伺服器崩潰 action is :趕回公司修理
觀察者模式是觀察者隨著被觀察物件變化而變化的?
通過**實現,知道了觀察者有乙個 updatestate 方法,用來實現當被觀察物件狀態改變時動作響應。
被觀察者物件用list 儲存了一些觀察者。
當被觀察者物件狀態改變時,它就是呼叫notify 方法。notify 方法會取出list 中所有的observer 物件,並執行每乙個 obserer 的updatestate 方法。也就是說觀察者得upatestate 方法不是觀察者自己呼叫的,而是被 被觀察物件呼叫的。
學習筆記 Java設計模式 命令模式
最近做開發發現自己 邏輯混亂,覺得有必要重溫下設計模式。於是就翻到了終點大神的部落格在這裡記錄下自己的學習後的理解。命令模式 命令模式的主要目的,用官話來說,是將呼叫者與執行者解耦。將 結構劃分為呼叫者 命令 執行者三個部分。其中,執行者作為命令的屬性被設定,因此,也可以理解為呼叫者 命令 執行者 ...
java學習筆記12
今天學習操作基本資料型別的流datainputstream dataoutputstream dataoutputstream outputstream out public void writedata dataoutputstream dos new dataoutputstream new f...
Java設計模式學習筆記1
用最簡單加減法來舉例 calculate 計算方法介面 public inte ce calculate分別建立add以及sub子類並實現其邏輯 public class addimplements calculate public class subimplements calculate 建立c...