開篇還是從名字說起,「觀察者模式」的觀察者三個字資訊量很大。玩過很多網路遊戲的童鞋們應該知道,即便是鬥地主,除了玩家,還有乙個角色叫「觀察者"。在我們今天他談論的模式設計中,觀察者也是如此。首先,要有乙個「主題」。只有有了乙個主題,觀察者才能搬著小板凳兒聚在一堆。其次,觀察者還必須要有自己的操作。否則你聚在一堆兒沒事做也沒什麼意義。
從面向過程的角度來看,首先是觀察者向主題註冊,註冊完之後,主題再通知觀察者做出相應的操作,整個事情就完了。
從物件導向的角度來看,主題提供註冊和通知的介面,觀察者提供自身操作的介面。(這些觀察者擁有乙個同乙個介面。)觀察者利用主題的介面向主題註冊,而主題利用觀察者介面通知觀察者。耦合度相當之低
如何實現觀察者註冊?通過前面的註冊者模式很容易給我們提供思路,把這些物件加到一棵註冊樹上就好了嘛。如何通知?這就更簡單了,對註冊樹進行遍歷,讓每個物件實現其介面提供的操作。
<?php
// 主題介面
inte***ce subject
// 觀察者介面
inte***ce observer
// 主題
class action implements subject
public function notify()
}}// 觀察者
class cat implements observer
} class dog implements observer
} class people implements observer
}// 應用例項
$action=new action();
$action->register(new cat());
$action->register(new people());
$action->register(new dog());
$action->notify();
當新物件要填入的時候,只需要在主題(又叫可觀察者)中進行註冊(註冊方式很多,你也可以在構造的時候,或者框架訪問的介面中進行註冊),然後實現**直接在新物件的介面中進行。這降低了主題物件和觀察者物件的耦合度。
好的設計模式不會直接進入你的**中,而是進入你的大腦中。
php設計模式 觀察者模式
簡言之 觀察者模式 observer 當乙個物件狀態發生改變時,依賴它的物件全部會收到通知,並自動更新。具體描述 乙個物件通過新增乙個方法 該方法允許另乙個物件 觀察者,註冊自己 使本身變得可觀察。當可觀察的物件更改時,它會將訊息傳送到已註冊的觀察者。這些觀察者使用該資訊執行的操作與可觀察的物件無關...
PHP 設計模式 觀察者模式
觀察者模式 乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。1 定義乙個專案subjects抽象類 乙個觀察者observers抽象類。subject 實現三個方法,1,新增add 刪除 remove 通知 notify。observe 實現update 方法 格式和組合模式有點...
php設計模式 觀察者模式
在web應用中,通常,一些小範圍的資料和業務的改變,其他相關的業務資料也需要發生改變,這種情況,觀察者模式很適合。觀察者模式,通常是通過使用乙個叫observer的介面實現的,如果其他的類要引入觀察者,就要實現這個介面 比如,有乙個這樣的需求,如果產品匯率改變了,所有產品的相關頁面展示資訊和 計算也...