日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

解析PHP觀察者模式Observer

瀏覽:40日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲一区二区免费在线观看| 亚洲国产专区校园欧美| 欧美一级精品| 久久精品电影| 日韩精品麻豆| 香蕉精品久久| 蜜桃一区二区三区在线| 美美哒免费高清在线观看视频一区二区| 激情91久久| 亚洲欧美日韩国产一区| 精品中文一区| 热久久国产精品| 日韩黄色av| 国产精品色在线网站| 欧美激情视频一区二区三区在线播放| 牛牛精品成人免费视频| 欧美日一区二区三区在线观看国产免| 日韩国产欧美视频| 日韩av中文字幕一区| 国产亚洲欧美日韩精品一区二区三区| 国产精品www994| 91中文字幕精品永久在线| 日韩精品2区| 国产综合视频| 美国三级日本三级久久99| 国产乱码精品一区二区三区亚洲人 | 国产网站在线| 久久久成人网| 亚洲影视一区二区三区| 国产图片一区| 正在播放日韩精品| 欧美精选一区二区三区| 蜜桃久久精品一区二区| 久久精品99国产精品日本| 欧美黑人巨大videos精品| 三级小说欧洲区亚洲区| 亚洲一区二区三区高清| 国产调教精品| 九色porny丨国产首页在线| 激情久久五月| 免费看欧美美女黄的网站| 欧美亚洲二区| 鲁鲁在线中文| 视频一区二区三区在线| 欧美日韩亚洲一区三区| 亚洲综合电影| 亚洲字幕久久| 久久久男人天堂| 99视频一区| 国产精品亚洲二区| 日韩精品一区二区三区免费观看| 亚洲精品无播放器在线播放| 日韩中文在线电影| 美女在线视频一区| 欧美日韩一视频区二区| 免费av一区| 伊人久久高清| 国内亚洲精品| 中国女人久久久| 久久国产88| 在线精品一区| 日韩久久99| 国产一区二区三区不卡视频网站 | 久久国产免费| 国产99精品| 日韩一区二区三区精品| 国产一区二区三区四区二区| 亚洲一区久久| 国产福利片在线观看| 亚洲精品国模| 久久久久久美女精品| 国产二区精品| 亚洲三级欧美| 免费成人在线影院| 青青草国产成人99久久| 国产一区二区中文| 日韩精品a在线观看91| 蜜臀av一区二区三区| 久久午夜影院| 色婷婷色综合| 在线视频亚洲欧美中文| 四季av一区二区凹凸精品| 日韩制服丝袜av| 三级精品视频| 精品视频99| 日本va欧美va欧美va精品| 影视先锋久久| 中文字幕人成乱码在线观看| 欧美在线91| 老牛国产精品一区的观看方式| av资源中文在线天堂| 日本精品另类| 亚洲一区久久| 久久久久久夜| 国产乱码精品一区二区三区四区 | 在线视频精品| 麻豆mv在线观看| 国产精品66| 亚洲精品无吗| 一本色道久久精品| 在线观看精品| 蜜桃久久久久| 日本三级亚洲精品| 西西人体一区二区| 欧洲在线一区| 人在线成免费视频| 国产精品3区| 国产日产精品_国产精品毛片 | 亚洲欧美日韩国产综合精品二区| 久久久精品午夜少妇| 91综合网人人| 日本一二区不卡| 久久精品国产在热久久| 国产精品qvod| 国产欧美自拍| 国产欧美在线观看免费| 人人精品久久| 日韩成人午夜精品| 欧美日韩亚洲一区在线观看| 日韩区欧美区| 午夜精品福利影院| 好吊日精品视频| 99久久亚洲精品| 久久久久久久久久久9不雅视频| 中文在线а√天堂| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 久久麻豆视频| 国产麻豆精品久久| 国产精品99久久免费| 免费精品一区| 国产精品久久亚洲不卡| 国产精品v一区二区三区| 国产精品嫩模av在线| 国产欧美日韩在线观看视频| 911亚洲精品| 国产毛片精品| 精品久久影院| 欧美a级一区二区| 蜜桃av.网站在线观看| 国产夫妻在线| 亚洲一区中文| 国产高清亚洲| 欧美福利一区| 欧美日韩一区二区三区四区在线观看| 国产精久久久| 欧美日韩中文一区二区| 日韩午夜视频在线| 日韩影院二区| 亚洲区国产区| 正在播放日韩精品| 欧美伊人影院| 午夜精品亚洲| 久久九九精品| 久久久夜精品| 久久午夜精品一区二区| 日本精品另类| 精品九九久久| 精品国产a一区二区三区v免费| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲中字黄色| 日韩欧美中文字幕一区二区三区| 人人爱人人干婷婷丁香亚洲| 麻豆一区二区三| 国产成人精品亚洲线观看| 久久久久国产精品一区三寸| 国产中文一区| 日韩精选在线| 不卡中文一二三区| 国产精品v日韩精品v欧美精品网站| 免费不卡中文字幕在线| 国产精品午夜av| 四虎精品一区二区免费| 在线一区av| 蜜桃精品在线| 国产精品一区高清| 国产一区观看| 日韩精品首页| 午夜日本精品| 日韩av中文字幕一区| 你懂的国产精品| 欧美三区四区| 亚洲精品日韩久久| www在线观看黄色| aa亚洲婷婷| 欧美成人一二区| 亚洲一区二区三区高清不卡| 麻豆国产欧美日韩综合精品二区| 尤物tv在线精品| 国产伦精品一区二区三区千人斩| 久久久久久久久丰满| 日韩av在线免费观看不卡| 日韩不卡视频在线观看| 日韩精品免费视频人成| 成人羞羞视频播放网站| 日韩欧美激情电影| 久久人人97超碰国产公开结果| 久久香蕉精品| 六月丁香综合在线视频| 国产亚洲精品v| 麻豆中文一区二区|