PHP 設計模式之觀察者模式

2021-07-09 23:26:11 字數 1985 閱讀 6782

**:

介紹現在有兩派,有的人建議使用設計模式,有的人不建議使用設計模式!

這就向寫文章一樣,有的人喜歡文章按照套路走,比如敘事性質的文章,時間,地點,人物,事件。而有的人喜歡寫雜文或者散文,有的人喜歡寫詩詞!

很多時候,我看設計模式的時候,有些設計模式只是吻合我的**習慣。但是你硬去套它,那麼反而適得其反。——很多時候是學會了招式,在應用中不知不覺的使用上這些招式,才能掌握其道,但是也不要拘泥於招式,正所謂「無招勝有招」嗎?

我學設計模式的初衷,就是知道有這麼個玩意兒?腦子裡有這麼個印象,也不會生套它!如果設計模式不符合你的習慣對你閱讀**反而是不利的!

觀察者模式定義物件的一對多依賴,這樣一來,當乙個物件改變狀態時,它的所有依賴者都會收到通知並自動更新!

設計原則

在觀察者模式中,會改變的是主題的狀態以及觀察者的數目。用這個模式,你可以改變依賴於主題狀態的物件,卻不必改變主題。——找出程式中會變化的方面,然後將其和固定不變的方面相分離!

主題和觀察者都使用介面:觀察者利用主題的介面向主題註冊,而主題利用觀察者介面通知觀察者。這樣可以讓兩者之間運作正常,又同時具有松耦合的優點! ——針對介面程式設計,不針對實現程式設計! 。

觀察者模式利用「組合」將許多觀察者組合進主題中。物件(觀察者——主題)之間的這種關係不是通過繼承產生的,而是在執行時利用組合的方式產生的。 ——多用組合,少用繼承! **

<?php

/**

* 觀察者模式

* @author: mac

* @date: 2012/02/22

*/

class*****

publicfunctiontrigger()

}

}

}

/**

* 觀察者要實現的介面

*/

inte***ceobserverable

classsubscriberimplementsobserverable

}

下面是測試**

/*  測試    */

$*****=new*****();

$*****->register(newsubscriber());

//$*****->register(new subscriber1());

//$*****->register(new subscriber2());

$*****->trigger();

總結當新物件要填入的時候,只需要在主題(又叫可觀察者)中進行註冊(註冊方式很多,你也可以在構造的時候,或者框架訪問的介面中進行註冊),然後實現**直接在新物件的介面中進行。這降低了主題物件和觀察者物件的耦合度。

好的設計模式不會直接進入你的**中,而是進入你的大腦中。

參考:head first 設計模式

php設計模式之 觀察者模式

觀察者模式 observer 當乙個物件狀態發生改變時,依賴它的物件全部收到通知,並自動更新。抽象被觀察者 abstract class eventgenerator 通知所有觀察者 public function notify 具體被觀察者class event extends eventgene...

php 設計模式之觀察者模式

觀察者模式 1.抽象事件發生類 abstract class eventgenerator 對 所有 觀察者 進行 事件 通知 function notify 2.宣告具體事件類 class event extends eventgenerator 3.宣告 乙個 觀察者 介面 inte ce ob...

PHP設計模式之觀察者模式

引導1 什麼是觀察者模式?觀察者模式模式也叫訊息訂閱,作用是乙個操作發生變化時,便會圍繞這個操作進行一系列的其他操作。上 created by phpstorm.user rjj date 2017 7 3 time 22 31 通知訊息 觀察者 inte ce inotice 業務介面 被觀察者 ...