[toc]
我們來看看報紙和雜誌的訂閱是怎麼回事:
觀察者模式就像訂閱報紙,知識名稱不太一樣:出版社改為「主題」(subject),訂閱者稱為「觀察者」(observer)。實現觀察者模式的方式不只一種,但是包含subject和observer介面的類設計的做法最常見。
主題可以註冊、登出觀察者,當資料改變時,可以通知觀察者;所有的觀察者必須繼承觀察者介面,這個介面只有乙個update()方法,當主題的狀態被改變時呼叫。主題繼承 splsubject,這個是php內建觀察者模式主題介面;觀察者繼承splobserver;同時,主題中用splobjectstorage來儲存觀察者列表。
這個是主題:
<?php
namespace observer2;
use splobserver;
class subject implements \splsubject
/*** 註冊觀察者
** attach an splobserver
* @link
* @param splobserver $observer * thesplobserverto attach.
* * @return void
* @since 5.1.0
*/public function attach(splobserver $observer)
/*** 登出觀察者
** detach an observer
* @link
* @param splobserver $observer * thesplobserverto detach.
* * @return void
* @since 5.1.0
*/public function detach(splobserver $observer)
/*** 通知觀察者
* notify an observer
* @link
* @return void
* @since 5.1.0
*/public function notify()}}
/*** 資料改變,同時通知觀察者
** @param $upd_data
*/public function upddata($upd_data)
/*** 訊息改變,同時通知觀察者
** @param $upd_msg
*/public function updmsg($upd_msg)
/*** @return mixed
*/public function getupddata()
/*** @return mixed
*/public function getupdmsg()
}
有乙個貓貓觀察者:
<?php
namespace observer2;
use splsubject;
class catobserver implements \splobserver
}
還有乙個狗狗觀察者:
<?php
namespace observer2;
class dogobserver implements \splobserver
}
來看一下呼叫吧:
<?php
include 'catobserver.php';
include 'subject.php';
include 'dogobserver.php';
// 觀察者
$catobserver = new \observer2\catobserver();
$dogobserver=new observer2\dogobserver();
// 主題
$subject = new \observer2\subject();
// 註冊觀察者
$subject->attach($catobserver);
$subject->attach($dogobserver);
// 主題有所變化,觀察者得到對應的變化
$subject->upddata(12);
$subject->updmsg('你媽媽喊你回家吃飯');
顯示結果:
i am 貓貓觀察者,i get new data:12;msg:還不該吃飯
i am 狗狗觀察者,data:12;msg:還不該吃飯
i am 貓貓觀察者,i get new data:12;msg:你媽媽喊你回家吃飯
i am 狗狗觀察者,data:12;msg:你媽媽喊你回家吃飯
把我的例子弄懂,你也應該能理解觀察者模式了。
來看一下你學到了什麼:
00原則--物件之間松耦合設計。
觀察者模式--在物件之間定義一對多的依賴,這樣一來,當乙個物件改變狀態,依賴他的物件就會收到通知,並自動更新。
php設計 PHP常用設計模式
1 單例模式指在整個應用中只有乙個物件例項的設計模式 class single public rand static private instance 類直接呼叫 final private function construct private防止外部new this rand mt rand 1,...
PHP設計模式 工廠設計模式
工廠模式,如其名稱一樣,就是乙個工廠,用於建立產品。使用工廠模式的好處就是請求者只需要發出請求,具體的例項化過程交給工廠模式,省去了new的過程。並且如果後期開發,類名發生變化,只需要調整工廠模式中一行new相關 不需要修改一大堆 最簡單的工廠模式,實際上就是乙個switch case結構,通過傳入...
php設計模式
php設計模式介紹 導言 php設計模式介紹 第一章 程式設計慣用法 php設計模式介紹 第二章 值物件模式 php設計模式介紹 第三章 工廠模式 php設計模式介紹 第四章 單條模式 php設計模式介紹 第五章 註冊模式 php設計模式介紹 第六章 偽物件模式 php設計模式介紹 第七章 策略模式...