觀察者模式 php

2021-07-28 12:37:25 字數 1570 閱讀 2233

觀察者模式:當你的某個功能在後期可能新增很多不太相干的功能時,可以考慮使用觀察者模式,

如乙個使用者登入類,後期可能要求,記錄登入使用者日誌,簡訊提醒,郵件提醒等功能.個人更願意叫他補丁模式.

簡單說,就是將每個補丁定義為乙個類,這些補丁類實現同一介面,這些補丁類實現同一方法.

原始類只要接收這些補丁類的物件,然後執行物件中的方法即是執行補丁.

class login

//使用者註冊功能

function handlelogin($user,$pass,$ip)

}   }

//補丁類要實現的介面

inte***ce patches

//新增乙個傳送郵件的功能

class sendmail implements patches}$login=new login();$login->addpatch(new sendmail());//新增補丁$login->handlelogin('張三','123','192.168.23.45');//驗證使用者,同時執行補丁

//如果後期想要新增新的功能的話,直接新增實現patches介面的類即可,如記錄使用者日誌

//新增乙個傳送郵件的功能

class logger implements patches

}$login->addpatch(new logger());//新增補丁

完畢!!!

php自帶有觀察者模式的類:splobserver,splsubject,splobjectstorage

其中splobserver相當於patches介面

splobjectstorage相當於patches物件

splsubject相當於login類

class login implements splsubject

//新增觀察者物件

function attach(splobserver $observer)

//刪除觀察者物件

function detach(splobserver $observer)

function notify(){}

function handlelogin($user,$pass,$ip)

return 使用者驗證結果;}}

//擴充套件一下splobserver,新增乙個doupdate方法,供子類實現

abstract class loginobserver implements splobserver

function update(splsubject $subject)

abstract function doupdate(login $login);

}//新增日誌功能

class logger extends loginobserver

}//新增郵件功能

class mail extends loginobserver

}$login=new login();

$login->attach(new logger($login));//新增日誌處理功能

$login->handlelogin('張三','123','192.168.23.45');//執行日誌處理功能

PHP 觀察者模式

觀察者模式 定義物件間的一種一對多的依賴關係,以便當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並自動重新整理 能夠便利地建立檢視目標物件狀態的物件,並且提供與核心物件非耦合的指定功能 外掛程式系統 class observerable public function removeobse...

PHP觀察者模式

我理解的觀察者模式就是,當我們觸發乙個事件的時候,想要把這個操作告訴給我想要告訴的物件,讓他們都執行這個操作,就是將他們繫結到這個事件下。1.定義乙個基類 用於新增觀察者也就是我想要通知的物件,還有通知觀察者 eventgenerator.php abstract class eventgenera...

PHP觀察者模式

觀察者模式 當乙個物件的狀態發生改變時,依賴他的物件會全部收到通知,並自動更新 場景 當乙個事件發生後,要執行一連串更新操作,傳統的程式設計方式,就是在事件的 之後直接加入處理邏輯,當更新邏輯增多之後,變得難以維護,這種方式是耦合式的,侵入式的,增加新的邏輯需要改變事件主題的 觀察者模式實現了低耦合...