觀察者模式 當乙個物件的狀態發生改變時,依賴他的物件會全部收到通知,並自動更新
場景:當乙個事件發生後,要執行一連串更新操作,傳統的程式設計方式,就是在事件的**之後直接加入處理邏輯,當更新邏輯增多之後,**變得難以維護,這種方式是耦合式的,侵入式的,增加新的邏輯需要改變事件主題的**
觀察者模式實現了低耦合,非侵入式的通知與更新
abstractclass
eventgenerator
//事件通知
public
function
notify()
}}/*
* * 觀察者介面類
* inte***ce observer */
inte***ce
observer/**
* 觀察者1 */
class observer1 implements
observer}/*
* * 觀察者1 */
class observer2 implements
observer}/*
* * 事件
* class event */
class event extends
eventgenerator}//
建立乙個事件
$event = new
event();
//為事件增加旁觀者
$event->add(new
observer1());
$event->add(new
observer2());
//執行事件 通知旁觀者
$event->trigger();
1 抽象的事件產生類,定義乙個新增觀察者方法,和通知方法(執行觀察者方法)
2 定義觀察者介面,實現方法 ,觀察者實現
3 定義具體實現類繼承抽象事件,實現通知方法
4 建立物件,增加旁觀者,更新
具體註冊例項
<?php
/**
* 3.1php設計模式-觀測者模式
* 3.1.1概念:其實觀察者模式這是一種較為容易去理解的一種模式吧,它是一種事件系統,意味
* 著這一模式允許某個類觀察另乙個類的狀態,當被觀察的類狀態發生改變的時候,
* 觀察類可以收到通知並且做出相應的動作;觀察者模式為您提供了避免元件之間
* 緊密耦合的另一種方法
* 3.1.2關鍵點:
* 1.被觀察者->追加觀察者;->一處觀察者;->滿足條件時通知觀察者;->觀察條件
* 2.觀察者 ->接受觀察方法
* 3.1.3缺點:
* 3.1.4觀察者模式在php中的應用場合:在web開發中觀察者應用的方面很多
* 典型的:使用者註冊(驗證郵件,使用者資訊啟用),購物**下單時郵件/簡訊通知等
* 3.1.5php內部的支援
* splsubject 介面,它代表著被觀察的物件,
* 其結構:
* inte***ce splsubject
*
* splobserver 介面,它代表著充當觀察者的物件,
* 其結構:
* inte***ce splobserver
*
*//**
* 使用者登陸-詮釋觀察者模式
*/class
user
implements
splsubject
/*** 去除觀察者
* @param splobserver $observer 觀察者
* @param int $type 觀察型別
*/public
function
detach(splobserver
$observer
, $type
)
} /**
* 滿足條件時通知觀察者
* @param int $type 觀察型別
*/public
function
notify(
$type
)
} }
/*** 新增使用者
* @param str $username 使用者名稱
* @param str $password 密碼
* @param str $email 郵箱
* @return bool
*/public
function
adduser()
/*** 使用者資訊編輯
* @param str $username 使用者名稱
* @param str $password 密碼
* @param str $email 郵箱
* @return bool
*/public
function
edituser()
} /*** 觀察者-傳送郵件
*/class
send_mail
implements
splobserver
/***傳送郵件
*@param str $email 郵箱位址
*@param str $title 郵件標題
*@param str $content 郵件內容
*/public
function
sendemail(
, $title
, $content
)
} ?>
PHP 觀察者模式
觀察者模式 定義物件間的一種一對多的依賴關係,以便當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並自動重新整理 能夠便利地建立檢視目標物件狀態的物件,並且提供與核心物件非耦合的指定功能 外掛程式系統 class observerable public function removeobse...
PHP觀察者模式
我理解的觀察者模式就是,當我們觸發乙個事件的時候,想要把這個操作告訴給我想要告訴的物件,讓他們都執行這個操作,就是將他們繫結到這個事件下。1.定義乙個基類 用於新增觀察者也就是我想要通知的物件,還有通知觀察者 eventgenerator.php abstract class eventgenera...
觀察者模式 php
觀察者模式 當你的某個功能在後期可能新增很多不太相干的功能時,可以考慮使用觀察者模式,如乙個使用者登入類,後期可能要求,記錄登入使用者日誌,簡訊提醒,郵件提醒等功能.個人更願意叫他補丁模式.簡單說,就是將每個補丁定義為乙個類,這些補丁類實現同一介面,這些補丁類實現同一方法.原始類只要接收這些補丁類的...