成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

解析PHP觀察者模式Observer

瀏覽:2日期:2022-09-07 13:10:12
目錄觀察者模式結構圖概念代碼示例觀察者模式結構圖

解析PHP觀察者模式Observer

概念

一個'演員'(被觀察者),一群'觀眾'(觀察者),一臺'攝影機'(記錄容器)

【觀察者模式中主要角色】

1.抽象主題(Subject)角色:主題角色將所有對觀察者對象的引用保存在一個集合中,每個主題可以有任意多個觀察者。 抽象主題提供了增加和刪除觀察者對象的接口。

2.抽象觀察者(Observer)角色:為所有的具體觀察者定義一個接口,在觀察的主題發生改變時更新自己。

3.具體主題(ConcreteSubject)角色:存儲相關狀態到具體觀察者對象,當具體主題的內部狀態改變時,給所有登記過的觀察者發出通知。具體主題角色通常用一個具體子類實現。

4.具體觀察者(ConcretedObserver)角色:存儲一個具體主題對象,存儲相關狀態,實現抽象觀察者角色所要求的更新接口,以使得其自身狀態和主題的狀態保持一致。

【使用場景】

假設項目經理讓我們寫了一個登陸接口,咔咔擦擦寫完了

第二天讓我們加入統計登陸次數,然后在后面加代碼第三天讓我們判斷登陸地區,又在后面加代碼第四天讓我們在用戶登陸后推送活動,再再后面加代碼第N天,這個接口已經雜亂到沒人想維護了

我們需要讓項目保持高內聚低耦合,就可以用到觀察者模式(非必須,看需求)

【觀察者模式與其它模式】

1.【中介者模式】(Mediator):通過封裝復雜的更新語義,ChangeManager充當目標和觀察者之間的中介者。2.【單例模式】(singleton模式):ChangeManager可使用Singleton模式來保證它是唯一的并且是可全局訪問的。

代碼示例

接口示例

// 主題接口interface Subject{ public function register(Observer $observer); public function notify();}// 觀察者接口interface Observer{ public function watch();}

Subject就是被觀察者,Observer就是觀眾,也就是觀察者

被觀察者

// 被觀察者class Action implements Subject{ public $_observers=array(); public function register(Observer $observer){ $this->_observers[]=$observer; } public function notify(){ foreach ($this->_observers as $observer) { $observer->watch(); } } }

Action實現了被觀察者接口,他現在就是被觀察者,再定義一個$_observers數組,他就是記錄觀眾的容器了。

首先實現register方法,用它傳入一個觀察者,然后塞到數組里,再實現notify()方法,它會遍歷容器數組,執行每個觀察者的watch()方法。

觀察者

// 觀察者class Cat implements Observer{ public function watch(){ echo 'Cat watches TV<hr/>'; } } class Dog implements Observer{ public function watch(){ echo 'Dog watches TV<hr/>'; } } class People implements Observer{ public function watch(){ echo 'People watches TV<hr/>'; } }

這里定義了三個觀察者,全都實現了Observer接口,前面的Subject會循環調用每個觀察者的watch()方法,所以我們需要實現每個觀察者的watch()方法。

調用

// 應用實例$action=new Action();$action->register(new Cat());$action->register(new People());$action->register(new Dog());$action->notify();

首先new被觀察者對象,執行它的register()方法,把每個觀察者都放入容器數組,最后執行notify()方法,通知所有觀察者執行自己的方法。

PHP原生自帶的觀察者模式

PHP有自帶的觀察者模式

splsubject接口 - 被觀察者 Observer接口 - 觀察者 SplObjectStorage對象 - 容器

首先我們有一個用戶登錄類

class user{ public function login() { echo ’登錄完畢’ }

讓他實現splsubject接口成為被觀察者。

首先在構造函數里,讓他new SplObjectStorag()對象并賦值到屬性上方便后面調用 實現attach()方法,用來注冊觀察者 實現detach()方法,用來刪除觀察者 實現notify()方法,用來遍歷容器,調用每個觀察者的update方法(必須是update) rewind方法是容器指針重置到最開始,valid方法檢測容器是否遍歷完成并返回布爾,current方法是獲取當前的觀察者,next方法是將指針后移一位 修改login()方法,在里面調用notify()來通知觀察者事件完成了

class user implements splsubject{ protected $observer = null; public function __construct() {$this->observer = new SplObjectStorage(); } public function login() {$this->notify();echo ’登錄完畢’; } public function attach(SplObserver $observer) {$this->observer->attach($observer); } public function detach(SplObserver $observer) {$this->observer->detach($observer); } public function notify() {$this->observer->rewind();while ($this->observer->valid()){ $observer = $this->observer->current(); $observer->update($this); $this->observer->next();} }}

觀察者

每個觀察者實現SplObserver接口,并實現update()方法

class cat implements SplObserver { public function update(SplSubject $subject) {echo ’小貓叫一下’; }}class dog implements SplObserver { public function update(SplSubject $subject) {echo ’小狗吼一聲’; }}

應用

// 實時觀察$user = new user();$user->attach(new cat());$user->attach(new dog());$user->login();

以上就是解析PHP觀察者模式(Observer)的詳細內容,更多關于PHP觀察者模式(Observer)的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美一区亚洲| 色妹子一区二区| 一本色道**综合亚洲精品蜜桃冫| 欧美国产一区二区在线观看| 韩国毛片一区二区三区| 日本黄色一区二区| 视频在线观看一区| 国产精品久久久久久久久久直播 | 欧美性xxxxxxxx| 偷窥少妇高潮呻吟av久久免费| 亚洲第一在线| 中文字幕亚洲一区二区va在线| 91亚洲国产成人精品一区二区三| 精品国产不卡一区二区三区| 成人免费高清在线| 欧美草草影院在线视频| 成人亚洲精品久久久久软件| 91精品国产综合久久久久| 久久99九九99精品| 欧美日韩国产另类一区| 国内外成人在线| 日韩一区二区在线观看| 成人性视频网站| www成人在线观看| 成人中文字幕电影| 精品国产成人在线影院 | 一本色道久久| 亚洲精品大片www| 麻豆成人在线| 日产国产欧美视频一区精品| 欧洲精品一区二区三区在线观看| 日韩精品一卡二卡三卡四卡无卡| 色哟哟精品一区| 天堂精品中文字幕在线| 老牛影视一区二区三区| 日本在线播放一区二区三区| 在线免费av一区| 激情成人午夜视频| 日韩一区二区三区视频在线观看| 床上的激情91.| 久久久久久亚洲综合| 欧美一区二区三区另类 | 国产伦精品一区二区三区在线观看| 日韩一区二区三区av| 成人黄色综合网站| 欧美激情一区二区三区不卡 | 亚洲国产欧美一区二区三区丁香婷 | 国产精品一区一区| 欧美电视剧在线看免费| 91小视频免费看| 日韩码欧中文字| 久久精品三级| 国产精品一二一区| 国产午夜亚洲精品不卡| 亚洲激情网站| 久久精品国产亚洲高清剧情介绍| 日韩久久精品一区| 激情亚洲网站| 日本va欧美va瓶| 26uuu亚洲| 亚洲精品护士| 久久精品国产99久久6| 26uuu色噜噜精品一区二区| 日韩视频精品| 日本大胆欧美人术艺术动态| 日韩精品一区在线| 影音先锋亚洲一区| 奇米精品一区二区三区在线观看 | 日韩一级免费观看| 国产综合欧美| 午夜激情综合网| 日韩一区二区免费电影| 国内激情久久| 亚洲成人自拍偷拍| 欧美一区二区三区四区五区| 91色在线porny| 一区二区成人在线| 制服丝袜一区二区三区| 激情六月综合| 久久电影国产免费久久电影| 久久精品欧美一区二区三区不卡| 国产九区一区在线| 成人性生交大片免费看中文| 亚洲女子a中天字幕| 欧美午夜影院一区| 欧美日韩高清免费| 奇米色777欧美一区二区| 久久久噜噜噜久久人人看| 亚洲欧美精品在线观看| 国产高清在线观看免费不卡| 亚洲色图19p| 欧美日本免费一区二区三区| 欧美日韩国产高清| 秋霞电影网一区二区| 2021久久国产精品不只是精品| 中文精品视频一区二区在线观看| 国模冰冰炮一区二区| 国产精品卡一卡二| 欧美性受极品xxxx喷水| 欧美精品福利| 蜜桃久久久久久| 1区2区3区精品视频| 欧美日韩高清在线| 亚洲看片一区| 福利一区二区在线| 亚洲午夜久久久久中文字幕久| 精品国产网站在线观看| 美女成人午夜| 欧美 日韩 国产精品免费观看| 奇米影视在线99精品| 中文字幕在线播放不卡一区| 91精品久久久久久久久99蜜臂| 中文亚洲欧美| 91在线丨porny丨国产| 麻豆精品久久久| 亚洲三级在线观看| 精品免费国产二区三区| 色欧美日韩亚洲| 在线看片一区| 不卡的电影网站| 日产精品久久久久久久性色| 亚洲三级在线免费观看| 26uuu国产一区二区三区| 91精彩视频在线观看| 一色屋精品视频在线观看网站| 国产aⅴ精品一区二区三区色成熟| 亚洲一区二区视频在线观看| 国产日韩精品视频一区| 欧美男女性生活在线直播观看| 国产一区二区三区的电影 | 欧美日韩18| 懂色av一区二区三区蜜臀| 日韩和欧美一区二区| 亚洲人吸女人奶水| 久久精品亚洲国产奇米99| 欧美三级日韩在线| 国产精品普通话对白| 欧美日韩精品久久| 粗大黑人巨茎大战欧美成人| 美国十次了思思久久精品导航| 一区二区三区在线观看欧美| 国产欧美日韩在线看| 日韩一区二区三区在线| 欧美系列在线观看| 麻豆精品视频| 国产欧美短视频| 激情一区二区| 国产综合自拍| 99国产精品久久久久久久久久| 国产丶欧美丶日本不卡视频| 捆绑调教美女网站视频一区| 天堂蜜桃91精品| 亚洲成av人影院| 亚洲精品免费在线| 亚洲日本va在线观看| 中文字幕欧美三区| 2021久久国产精品不只是精品| 51精品久久久久久久蜜臀| 欧美午夜精品免费| 日本道精品一区二区三区| 羞羞答答国产精品www一本| 国产精品一区免费观看| 国产亚洲网站| 亚洲三级影院| 日韩一级免费| 99精品国产在热久久| 狠狠色综合网站久久久久久久| 色综合天天综合色综合av| 91小视频在线免费看| 欧美成人精品| 91尤物视频在线观看| 成人av午夜电影| 成人短视频下载| 成人影视亚洲图片在线| 成人网在线播放| www.色精品| 99国产精品国产精品久久| 成人99免费视频| 99视频在线观看一区三区| 波多野结衣精品在线| 99精品视频在线免费观看| 91亚洲永久精品| 欧美亚州在线观看| 亚洲成人中文| 伊人久久亚洲美女图片| 日韩午夜高潮| 裸体一区二区| 日本精品视频一区二区| 欧美日韩国产免费一区二区| 欧美一区二区视频免费观看| 精品国产一区久久| 久久丝袜美腿综合| 中国av一区二区三区| 亚洲精品国产品国语在线app| 性做久久久久久| 理论片日本一区| 国产精品99久| 91日韩精品一区| 激情五月***国产精品| 国产亚洲精品久久飘花|