PHP觀察者模式原理與簡單實(shí)現(xiàn)方法示例
本文實(shí)例講述了PHP觀察者模式原理與簡單實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:當(dāng)一個(gè)對象狀態(tài)發(fā)生改變后,會(huì)影響到其他幾個(gè)對象的改變,這時(shí)候可以用觀察者模式。像wodpe這樣的應(yīng)用程序中,它容外部開發(fā)組開發(fā)插件,比......
以下是【金聰采編】分享的內(nèi)容全文:
以下是【金聰采編】分享的內(nèi)容全文:
本文實(shí)例講述了PHP觀察者模式原理與簡單實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
當(dāng)一個(gè)對象狀態(tài)發(fā)生改變后,會(huì)影響到其他幾個(gè)對象的改變,這時(shí)候可以用觀察者模式。像wordpress這樣的應(yīng)用程序中,它容外部開發(fā)組開發(fā)插件,比如用戶授權(quán)的博客統(tǒng)計(jì)插件、積分插件,這時(shí)候可以應(yīng)用觀察者模式,先注冊這些插件,當(dāng)用戶發(fā)布一篇博文后,就回自動(dòng)通知相應(yīng)的插件更新。
觀察者模式符合接口隔離原則,實(shí)現(xiàn)了對象之間的松散耦合。
觀察者模式UML圖:

在php SPL中已經(jīng)提供SplSubject和SqlOberver接口
interface SplSubject{ function attach(SplObserver $observer); function detach(SplObserver $observer); function notify();}interface SqlObserver{ function update(SplSubject $subject);}下面具體實(shí)現(xiàn)上面例子
class Subject implements SplSubject{ private $observers; public function attach(SplObserver $observer) { if (!in_array($observer, $this->observers)) { $this->observers[] = $observer; } } public function detach(SplObserver $observer) { if (false != ($index = array_search($observer, $this->observers))) { unset($this->observers[$index]); } } public function post() { //post相關(guān)code $this->notify(); } private function notify() { foreach ($this->observers as $observer) { $observer->update($this); } } public function setCount($count) { echo "數(shù)據(jù)量加" . $count; } public function setIntegral($integral) { echo "積分量加" . $integral; }}class Observer1 implements SplObserver{ public function update($subject) { $subject-> setCount(1); }}class Observer2 implements SplObserver{ public function update($subject) { $subject-> setIntegral(10); }}class Client{ public function test() { $subject = new Subject(); $subject->attach(new Observer1()); $subject->attach(new Observer2()); $subject->post();//輸出:數(shù)據(jù)量加1 積分量加10 }}更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP基本語法入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。

侵權(quán)舉報(bào)/版權(quán)申訴



