**:
介紹現在有兩派,有的人建議使用設計模式,有的人不建議使用設計模式!
這就向寫文章一樣,有的人喜歡文章按照套路走,比如敘事性質的文章,時間,地點,人物,事件。而有的人喜歡寫雜文或者散文,有的人喜歡寫詩詞!
很多時候,我看設計模式的時候,有些設計模式只是吻合我的**習慣。但是你硬去套它,那麼反而適得其反。——很多時候是學會了招式,在應用中不知不覺的使用上這些招式,才能掌握其道,但是也不要拘泥於招式,正所謂「無招勝有招」嗎?
我學設計模式的初衷,就是知道有這麼個玩意兒?腦子裡有這麼個印象,也不會生套它!如果設計模式不符合你的習慣對你閱讀**反而是不利的!
觀察者模式定義物件的一對多依賴,這樣一來,當乙個物件改變狀態時,它的所有依賴者都會收到通知並自動更新!
設計原則
在觀察者模式中,會改變的是主題的狀態以及觀察者的數目。用這個模式,你可以改變依賴於主題狀態的物件,卻不必改變主題。——找出程式中會變化的方面,然後將其和固定不變的方面相分離!
主題和觀察者都使用介面:觀察者利用主題的介面向主題註冊,而主題利用觀察者介面通知觀察者。這樣可以讓兩者之間運作正常,又同時具有松耦合的優點! ——針對介面程式設計,不針對實現程式設計! 。
觀察者模式利用「組合」將許多觀察者組合進主題中。物件(觀察者——主題)之間的這種關係不是通過繼承產生的,而是在執行時利用組合的方式產生的。 ——多用組合,少用繼承! **
<?php
/**
* 觀察者模式
* @author: mac
* @date: 2012/02/22
*/
class
*****
public
function
trigger()
}
}
}
/**
* 觀察者要實現的介面
*/
inte***ce
observerable
class
subscriber
implements
observerable
}
下面是測試**
/* 測試 */
$*****
=
new
*****();
$*****
->register(
new
subscriber());
//$*****->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 業務介面 被觀察者 ...