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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP設(shè)計(jì)模式之觀察者模式淺析

瀏覽:336日期:2022-06-10 18:33:22
目錄
  • PHP觀察者模式(Observer Pattern)
  • 模式結(jié)構(gòu)
  • 實(shí)現(xiàn)步驟
  • 代碼示例
  • 適用場(chǎng)景

PHP觀察者模式(Observer Pattern)

觀察者模式是一種行為設(shè)計(jì)模式,它定義了一種訂閱機(jī)制,讓一個(gè)或多個(gè)對(duì)象(觀察者)自動(dòng)被通知并更新,當(dāng)被觀察對(duì)象(主題)的狀態(tài)發(fā)生改變時(shí)。這種模式非常適合在一個(gè)對(duì)象的狀態(tài)變化需要影響其他對(duì)象時(shí)使用。

模式結(jié)構(gòu)

觀察者模式包含三個(gè)角色:

  • 主題(Subject):它是被觀察的對(duì)象,它維護(hù)著一個(gè)觀察者集合,并提供了添加、刪除和通知觀察者的接口。
  • 觀察者(Observer):它定義了一個(gè)更新接口,當(dāng)被觀察對(duì)象發(fā)生改變時(shí)會(huì)被調(diào)用。
  • 具體觀察者(Concrete Observer):它實(shí)現(xiàn)了觀察者接口,并存儲(chǔ)了一些狀態(tài),當(dāng)被觀察對(duì)象發(fā)生改變時(shí),它會(huì)被通知,并更新自己的狀態(tài)。 轉(zhuǎn)存失敗重新上傳取消

實(shí)現(xiàn)步驟

以下是實(shí)現(xiàn)觀察者模式的步驟:

  • 定義主題(Subject)接口,并在其中定義添加、刪除和通知觀察者的方法。
  • 定義觀察者(Observer)接口,并在其中定義更新方法。
  • 定義具體主題(Concrete Subject)類,并實(shí)現(xiàn)主題接口中的方法。
  • 定義具體觀察者(Concrete Observer)類,并實(shí)現(xiàn)觀察者接口中的方法。
  • 在具體主題類中實(shí)現(xiàn)添加、刪除和通知觀察者的方法。當(dāng)主題狀態(tài)發(fā)生改變時(shí),調(diào)用通知方法,通知所有觀察者更新自己的狀態(tài)。

代碼示例

以下是一個(gè)簡(jiǎn)單的 PHP 實(shí)現(xiàn)觀察者模式的示例:

<?php
// 主題接口
interface Subject {
    public function attach(Observer $observer);
    public function detach(Observer $observer);
    public function notify();
}
// 觀察者接口
interface Observer {
    public function update(Subject $subject);
}
// 具體主題類
class ConcreteSubject implements Subject {
    private $observers = [];
    private $state;
    public function attach(Observer $observer) {
$this->observers[] = $observer;
    }
    public function detach(Observer $observer) {
$index = array_search($observer, $this->observers);
if ($index !== false) {
    unset($this->observers[$index]);
}
    }
    public function notify() {
foreach ($this->observers as $observer) {
    $observer->update($this);
}
    }
    public function getState() {
return $this->state;
    }
    public function setState($state) {
$this->state = $state;
$this->notify();
    }
}
// 具體觀察者類
class ConcreteObserver implements Observer {
    private $state;
    public function update(Subject $subject) {
$this->state = $subject->getState();
    }
    public function getState() {
return $this->state;
    }
}
// 使用觀察者模式
$subject = new ConcreteSubject();
$observer1 = new ConcreteObserver();
$observer2 = new ConcreteObserver();
$subject->attach($observer1);
$subject->attach($observer2);
$subject->setState("State 1");
echo $observer1->getState(); // 輸出:State 1
echo $observer2->getState(); // 輸出:State 1
$subject->setState("State 2");
echo $observer1->getState(); // 輸出:State 2
echo $observer2->getState(); // 輸出:State 2
$subject->detach($observer2);
$subject->setState("State 3");
echo $observer1->getState(); // 輸出:State 3
echo $observer2->getState(); // 輸出:State 2

在上面的示例中,我們定義了一個(gè) ConcreteSubject 類來(lái)實(shí)現(xiàn)主題接口,并定義了一個(gè) observers 數(shù)組來(lái)存儲(chǔ)觀察者。我們還定義了一個(gè) ConcreteObserver 類來(lái)實(shí)現(xiàn)觀察者接口,并存儲(chǔ)了一些狀態(tài)。我們使用 attach 方法將觀察者添加到主題中,使用 detach 方法將觀察者從主題中刪除,并使用 setState 方法來(lái)設(shè)置主題的狀態(tài)并通知觀察者更新自己的狀態(tài)。

適用場(chǎng)景

觀察者模式適用于以下場(chǎng)景:

  • 當(dāng)一個(gè)對(duì)象的狀態(tài)變化需要影響其他對(duì)象時(shí)。
  • 當(dāng)需要將一個(gè)對(duì)象的狀態(tài)變化通知多個(gè)對(duì)象時(shí)。
  • 當(dāng)需要將一個(gè)對(duì)象和其他多個(gè)對(duì)象解耦時(shí)。

優(yōu)點(diǎn)和缺點(diǎn)

觀察者模式的優(yōu)點(diǎn)包括:

  • 它可以讓主題和觀察者之間解耦,使得它們可以獨(dú)立地改變和擴(kuò)展。
  • 它可以支持廣播通信,即一個(gè)主題可以通知多個(gè)觀察者。
  • 它可以提供了一種簡(jiǎn)單的訂閱/發(fā)布機(jī)制。 觀察者模式的缺點(diǎn)包括。
  • 它可能會(huì)導(dǎo)致性能問(wèn)題,特別是在通知大量觀察者時(shí)。
  • 觀察者可能會(huì)收到不必要的通知,特別是在它們不關(guān)心主題的某些變化時(shí)。

到此這篇關(guān)于PHP設(shè)計(jì)模式之觀察者模式淺析的文章就介紹到這了,更多相關(guān)PHP觀察者模式內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: PHP
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品手机在线播放| 国产精品婷婷| 日韩免费久久| 久久成人精品| 久久精品日韩欧美| 日欧美一区二区| 国产精品原创| 日韩一区二区三免费高清在线观看 | 国产精品久久久久久久久妇女| 亚洲三级精品| 亚洲午夜91| 国产精品一卡| 亚洲区欧美区| 在线观看免费一区二区| 欧美成人精品午夜一区二区| 免费在线观看精品| 三级小说欧洲区亚洲区| 精品香蕉视频| 国产精品任我爽爆在线播放| 亚洲欧美网站| 天堂日韩电影| 91久久中文| 国产主播一区| 欧美久久天堂| 精品一区电影| 国产欧美日韩视频在线| 国内激情久久| 欧洲一区二区三区精品| av日韩中文| 99久久精品国产亚洲精品| 啪啪国产精品| 亚洲大片在线| 夜夜嗨av一区二区三区网站四季av| 久久影院一区| 欧美色图一区| 亚洲国产不卡| 免费久久99精品国产| 视频一区在线视频| 老鸭窝毛片一区二区三区| 影视先锋久久| 蜜桃伊人久久| 在线视频亚洲| 亚洲欧美视频| 亚洲精品福利| 国产精品毛片视频| 福利精品一区| zzzwww在线看片免费| 婷婷视频一区二区三区| 国产精品1区| 欧美一区不卡| 日本视频一区二区| 日韩综合一区二区| 国产精品久久久免费| 精品亚洲自拍| 岛国av免费在线观看| 999国产精品永久免费视频app| 日韩中文首页| 日韩中文字幕区一区有砖一区 | 黑丝一区二区| 亚洲一区国产| 婷婷精品久久久久久久久久不卡| 欧美日韩亚洲一区三区| 国产综合色区在线观看| 99re国产精品| 国产精品视频一区视频二区| 9999国产精品| 野花国产精品入口| 四虎精品一区二区免费| 日本蜜桃在线观看视频| 日韩影院精彩在线| 国产一区二区视频在线看| 国产亚洲精品自拍| 国产精品调教| 欧美日韩国产免费观看| 久久成人高清| 亚洲专区一区| 福利一区二区三区视频在线观看| 日韩中文字幕一区二区三区| 精品视频国产| 亚洲精品乱码| 另类中文字幕国产精品| 日韩动漫一区| 欧美freesex黑人又粗又大| 亚洲字幕久久| 亚洲成人va| 国产精品第一| 三级欧美韩日大片在线看| 国产在线观看www| 日韩黄色av| 亚洲高清毛片| 天堂va在线高清一区| 日韩精品一卡| 99精品视频精品精品视频| 欧美精品一卡| 日本不卡一区二区三区| 美女精品在线观看| 国产欧美在线| 中文字幕系列一区| 夜夜嗨av一区二区三区网站四季av| 国产一区二区三区91| 久久久精品五月天| 麻豆国产精品777777在线| 人在线成免费视频| 麻豆91精品91久久久的内涵| 日韩一区电影| 麻豆视频一区二区| 日韩欧美精品| 久久久免费人体| 久久精品电影| 国产成人久久精品麻豆二区| 亚洲精品**中文毛片| 国产精品s色| 久久一区精品| 日韩高清中文字幕一区| 精品亚洲成人| 日韩国产一区二| 精品一区二区三区中文字幕 | 久久亚洲电影| 欧美黑人巨大videos精品| 亚洲精品欧美| 亚洲永久av| 三上亚洲一区二区| 视频一区欧美日韩| 亚洲v在线看| 91av一区| 日韩国产精品久久久久久亚洲| 丁香六月综合| 97精品视频在线看| 蜜桃视频在线观看一区| 欧美一级专区| 高清在线一区| 美女国产精品久久久| 性色av一区二区怡红| aa国产精品| 国产在视频一区二区三区吞精| 国产欧美日韩| 国产精品毛片在线看| 免费av一区二区三区四区| 在线亚洲国产精品网站| 亚洲激情黄色| 精品久久视频| а√天堂中文在线资源8| 少妇精品久久久一区二区| 亚洲精品日本| 999国产精品视频| 欧美日韩在线观看视频小说| 欧美日韩亚洲一区三区| 国产欧美亚洲精品a| 1024精品一区二区三区| 久久中文字幕av| 欧美极品中文字幕| 九九久久国产| 亚洲色图综合| 亚洲一区黄色| 在线天堂中文资源最新版| 天堂av在线| 欧美日韩1区| 你懂的国产精品| 蜜臀av在线播放一区二区三区| 亚洲人成高清| 九一成人免费视频| 久久香蕉精品| 91精品电影| 亚洲最大av| 四虎精品永久免费| 国产亚洲电影| 日本天堂一区| 国产日韩欧美一区在线| 国产不卡av一区二区| 国产+成+人+亚洲欧洲在线| 日韩三级一区| 你懂的亚洲视频| 婷婷精品在线观看| 国产精品香蕉| 欧美专区在线| 国产精品中文字幕亚洲欧美| 日韩av二区| 亚洲欧美伊人| 国产高潮在线| 久久久影院免费| 久久99久久久精品欧美| 福利一区视频| 91免费精品国偷自产在线在线| 奇米狠狠一区二区三区| 激情综合五月| 欧美午夜不卡| 国产精品亚洲欧美日韩一区在线| 在线中文字幕播放| 久久国产免费看| 天堂а√在线最新版中文在线| 性欧美xxxx免费岛国不卡电影| 88xx成人免费观看视频库| 91免费精品国偷自产在线在线| 欧美一区不卡| 高清日韩欧美| 中文日韩欧美| 亚洲成人一区在线观看| 水蜜桃久久夜色精品一区| 国产精品毛片| 鲁大师成人一区二区三区 |