亚洲欧美一区二区在线观看_久久精品视频免费观看_欧美精品 日韩_日韩精品在线观看视频

首頁>焦點(diǎn) > 正文

PHP面向?qū)ο蟮脑O(shè)計(jì)模式-觀察者模式|環(huán)球頭條

2023-04-29 14:22:09    出處:騰訊云


(資料圖片)

一、概述

觀察者模式是一種行為設(shè)計(jì)模式,它定義了對(duì)象之間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象狀態(tài)發(fā)生改變時(shí),所有依賴它的對(duì)象都將得到通知并自動(dòng)更新。這種模式也叫做發(fā)布-訂閱模式,它能夠解決對(duì)象之間的耦合關(guān)系。

觀察者模式有三個(gè)角色:Subject(主題)、Observer(觀察者)和ConcreteObserver(具體觀察者)。Subject是被觀察的對(duì)象,當(dāng)它的狀態(tài)發(fā)生改變時(shí),會(huì)通知所有觀察它的對(duì)象。Observer是觀察者,它定義了接收通知的接口,所有觀察者都實(shí)現(xiàn)這個(gè)接口。ConcreteObserver是具體的觀察者,它實(shí)現(xiàn)了Observer接口,當(dāng)Subject的狀態(tài)發(fā)生改變時(shí),它會(huì)接收到通知并作出相應(yīng)的處理。

觀察者模式的優(yōu)點(diǎn)是可以實(shí)現(xiàn)松耦合,即Subject和Observer之間的耦合度很低,它們可以獨(dú)立地改變而不會(huì)影響到對(duì)方。此外,觀察者模式還支持廣播通信,即Subject可以同時(shí)通知多個(gè)Observer。

二、示例

下面是一個(gè)使用觀察者模式的示例。假設(shè)有一個(gè)天氣主題,它會(huì)隨著天氣的變化通知所有的觀察者。觀察者可以是顯示天氣的頁面或者是發(fā)送短信的手機(jī)應(yīng)用程序。

定義Subject接口

首先,我們需要定義Subject接口,它定義了注冊(cè)、移除和通知觀察者的方法:

interface Subject{    public function registerObserver(Observer $observer);    public function removeObserver(Observer $observer);    public function notifyObservers();}

定義Observer接口

接下來,我們定義Observer接口,它定義了接收通知的方法:

interface Observer{    public function update($temperature, $humidity, $pressure);}

實(shí)現(xiàn)具體的Subject

然后,我們實(shí)現(xiàn)具體的Subject類,它維護(hù)了一個(gè)觀察者列表,當(dāng)它的狀態(tài)發(fā)生改變時(shí),會(huì)通知所有觀察者::

class WeatherData implements Subject{    private $observers;    private $temperature;    private $humidity;    private $pressure;        public function __construct()    {        $this->observers = array();    }        public function registerObserver(Observer $observer)    {        $this->observers[] = $observer;    }        public function removeObserver(Observer $observer)    {        $key = array_search($observer, $this->observers, true);        if ($key !== false) {            unset($this->observers[$key]);        }    }        public function notifyObservers()    {        foreach ($this->observers as $observer) {            $observer->update($this->temperature, $this->humidity, $this->pressure);        }    }        public function measurementsChanged()    {        $this->notifyObservers();    }        public function setMeasurements($temperature, $humidity, $pressure)    {        $this->temperature = $temperature;        $this->humidity = $humidity;        $this->pressure = $pressure;        $this->measurementsChanged();    }}

實(shí)現(xiàn)具體的Observer

最后,我們實(shí)現(xiàn)具體的Observer類,它實(shí)現(xiàn)了Observer接口的update方法,當(dāng)它接收到通知時(shí),會(huì)更新自己的狀態(tài):

class CurrentConditionsDisplay implements Observer{    private $temperature;    private $humidity;    private $pressure;    private $weatherData;        public function __construct(Subject $weatherData)    {        $this->weatherData = $weatherData;        $this->weatherData->registerObserver($this);    }        public function update($temperature, $humidity, $pressure)    {        $this->temperature = $temperature;        $this->humidity = $humidity;        $this->pressure = $pressure;        $this->display();    }        public function display()    {        echo "Current conditions: " . $this->temperature . "F degrees and " . $this->humidity . "% humidity\n";    }}

在這個(gè)示例中,WeatherData類是Subject,它維護(hù)了一個(gè)觀察者列表,并實(shí)現(xiàn)了注冊(cè)、移除和通知觀察者的方法。CurrentConditionsDisplay類是具體的觀察者,它實(shí)現(xiàn)了Observer接口的update方法,當(dāng)它接收到通知時(shí),會(huì)更新自己的狀態(tài)并調(diào)用display方法顯示當(dāng)前的天氣信息。

使用觀察者模式的主要步驟如下:

定義Subject接口,其中包含注冊(cè)、移除和通知觀察者的方法。定義Observer接口,其中包含接收通知的方法。實(shí)現(xiàn)具體的Subject類,維護(hù)觀察者列表,并實(shí)現(xiàn)注冊(cè)、移除和通知觀察者的方法。實(shí)現(xiàn)具體的Observer類,實(shí)現(xiàn)接收通知的方法并更新自己的狀態(tài)。在主程序中,創(chuàng)建具體的Subject和Observer對(duì)象,將Observer對(duì)象注冊(cè)到Subject對(duì)象中,當(dāng)Subject的狀態(tài)發(fā)生改變時(shí),通知所有注冊(cè)的Observer對(duì)象。

關(guān)鍵詞:

相關(guān)內(nèi)容

消費(fèi)
產(chǎn)業(yè)
2023中華張姓拜祖大典舉行 4月28日上午,2023中華張姓拜祖大典在中華張姓祖根地河南省濮陽縣揮公陵園如期舉行。2
中璜新材木飾面:添置精致家居裝飾美學(xué) 中璜新材木飾面是一家專業(yè)的家居裝飾公司,他們的產(chǎn)品旨在為家庭提供精致的家居裝飾美
高效記錄等你來體驗(yàn),科大訊飛智能錄音筆值得擁有 打工人的世界里永遠(yuǎn)充滿著激烈的競爭,這對(duì)于新人來說是極具挑戰(zhàn)的。新人上崗,除了熟
尊守道酒|因尊而守 因道而成——“自己人喝的好醬酒” 因尊而守,因道而成,尊守道酒,尊天而守天道,尊地而守地道,尊人而守人道,天地人和
基金
主站蜘蛛池模板: 国产精品九九九| 久久在线中文字幕| 在线精品日韩| 欧美精品一区在线发布| 韩国v欧美v日本v亚洲| 午夜精品久久久内射近拍高清| 亚洲一区二区在线免费观看| 国产精品一区二区免费在线观看| 久久99精品久久久久子伦| 国产精品入口免费视| 久久精品视频亚洲| 亚洲综合一区二区不卡| 亚洲综合在线播放| 国产精品一香蕉国产线看观看| 日韩av成人在线| 91国内在线视频| 成人国产精品av| 欧美极品欧美精品欧美视频| 91精品成人久久| 激情五月六月婷婷| 久久精品国产精品亚洲精品色| 97国产suv精品一区二区62| 久久99精品久久久久久久青青日本 | 国产精品av网站| 亚洲中文字幕无码中文字| 久久国产精品久久| 国产精品永久在线| 亚洲人成网站在线播放2019| 91精品久久久久| 国产精品精品视频| 日韩av在线综合| 五月婷婷一区| 日本一区二区三区精品视频| 欧美日韩精品免费看| 国产一区高清视频| 日本一区二区三区四区在线观看 | 99亚洲精品视频| 狠狠色综合网站久久久久久久| 国产日韩在线观看av| 国产精品美女久久久久av福利| 国产乱子夫妻xx黑人xyx真爽|