电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

PHP設計模式之觀察者模式淺析

瀏覽:205日期:2022-06-10 18:33:22
目錄
  • PHP觀察者模式(Observer Pattern)
  • 模式結構
  • 實現步驟
  • 代碼示例
  • 適用場景

PHP觀察者模式(Observer Pattern)

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

模式結構

觀察者模式包含三個角色:

  • 主題(Subject):它是被觀察的對象,它維護著一個觀察者集合,并提供了添加、刪除和通知觀察者的接口。
  • 觀察者(Observer):它定義了一個更新接口,當被觀察對象發生改變時會被調用。
  • 具體觀察者(Concrete Observer):它實現了觀察者接口,并存儲了一些狀態,當被觀察對象發生改變時,它會被通知,并更新自己的狀態。 轉存失敗重新上傳取消

實現步驟

以下是實現觀察者模式的步驟:

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

代碼示例

以下是一個簡單的 PHP 實現觀察者模式的示例:

<?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

在上面的示例中,我們定義了一個 ConcreteSubject 類來實現主題接口,并定義了一個 observers 數組來存儲觀察者。我們還定義了一個 ConcreteObserver 類來實現觀察者接口,并存儲了一些狀態。我們使用 attach 方法將觀察者添加到主題中,使用 detach 方法將觀察者從主題中刪除,并使用 setState 方法來設置主題的狀態并通知觀察者更新自己的狀態。

適用場景

觀察者模式適用于以下場景:

  • 當一個對象的狀態變化需要影響其他對象時。
  • 當需要將一個對象的狀態變化通知多個對象時。
  • 當需要將一個對象和其他多個對象解耦時。

優點和缺點

觀察者模式的優點包括:

  • 它可以讓主題和觀察者之間解耦,使得它們可以獨立地改變和擴展。
  • 它可以支持廣播通信,即一個主題可以通知多個觀察者。
  • 它可以提供了一種簡單的訂閱/發布機制。 觀察者模式的缺點包括。
  • 它可能會導致性能問題,特別是在通知大量觀察者時。
  • 觀察者可能會收到不必要的通知,特別是在它們不關心主題的某些變化時。

到此這篇關于PHP設計模式之觀察者模式淺析的文章就介紹到這了,更多相關PHP觀察者模式內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: PHP
相關文章:
主站蜘蛛池模板: 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | 对夹式止回阀_对夹式蝶形止回阀_对夹式软密封止回阀_超薄型止回阀_不锈钢底阀-温州上炬阀门科技有限公司 | 贵州水玻璃_-贵阳花溪闽兴水玻璃厂 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 刑事律师_深圳著名刑事辩护律师_王平聚【清华博士|刑法教授】 | 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 单电机制砂机,BHS制砂机,制沙机设备,制砂机价格-正升制砂机厂家 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 517瓜水果特产网|一个专注特产好物的网站 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 阜阳成人高考_阜阳成考报名时间_安徽省成人高考网 | 钢制暖气片散热器_天津钢制暖气片_卡麦罗散热器厂家 | 电销卡 防封电销卡 不封号电销卡 电话销售卡 白名单电销卡 电销系统 外呼系统 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 正压送风机-多叶送风口-板式排烟口-德州志诺通风设备 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 天然气分析仪-液化气二甲醚分析仪|传昊仪器 | 西宁装修_西宁装修公司-西宁业之峰装饰-青海业之峰墅级装饰设计公司【官网】 | 称重传感器,测力传感器,拉压力传感器,压力变送器,扭矩传感器,南京凯基特电气有限公司 | 成都离婚律师|成都结婚律师|成都离婚财产分割律师|成都律师-成都离婚律师网 | 东莞压铸厂_精密压铸_锌合金压铸_铝合金压铸_压铸件加工_东莞祥宇金属制品 | 砍排机-锯骨机-冻肉切丁机-熟肉切片机-预制菜生产线一站式服务厂商 - 广州市祥九瑞盈机械设备有限公司 | 越南专线物流_东莞国际物流_东南亚专线物流_行通物流 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | 证券新闻,热播美式保罗1984第二部_腾讯1080p-仁爱影院 | 杭州月嫂技术培训服务公司-催乳师培训中心报名费用-产后康复师培训机构-杭州优贝姆健康管理有限公司 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 深圳展厅设计_企业展馆设计_展厅设计公司_数字展厅设计_深圳百艺堂 | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | 蓝鹏测控平台 - 智慧车间系统 - 车间生产数据采集与分析系统 | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 制氮设备-变压吸附制氮设备-制氧设备-杭州聚贤气体设备制造有限公司 | 建筑工程资质合作-工程资质加盟分公司-建筑资质加盟 | _网名词典_网名大全_qq网名_情侣网名_个性网名 | (中山|佛山|江门)环氧地坪漆,停车场地板漆,车库地板漆,聚氨酯地板漆-中山永旺地坪漆厂家 | POS机办理_个人POS机免费领取 - 银联POS机申请首页 | 不锈钢列管式冷凝器,换热器厂家-无锡飞尔诺环境工程有限公司 |