• 首页
  • 行业
  • 财经
  • 综合
  • 热点
  • 科技
  • 商业
  • 要闻
  • 观点
  • 经济
  • 社会
  • 法治
  • 文旅
  • 体育
  • 健康
  • 生活
  • 国际
  • 国内
  • 教育
logo
  • 要闻 >
  • 正文

【环球热闻】PHP面向对象的设计模式-观察者模式

2023-04-29 13:16:31 来源:腾讯云


(相关资料图)

一、概述

观察者模式是一种行为设计模式,它定义了对象之间的一种一对多的依赖关系,当一个对象状态发生改变时,所有依赖它的对象都将得到通知并自动更新。这种模式也叫做发布-订阅模式,它能够解决对象之间的耦合关系。

观察者模式有三个角色:Subject(主题)、Observer(观察者)和ConcreteObserver(具体观察者)。Subject是被观察的对象,当它的状态发生改变时,会通知所有观察它的对象。Observer是观察者,它定义了接收通知的接口,所有观察者都实现这个接口。ConcreteObserver是具体的观察者,它实现了Observer接口,当Subject的状态发生改变时,它会接收到通知并作出相应的处理。

观察者模式的优点是可以实现松耦合,即Subject和Observer之间的耦合度很低,它们可以独立地改变而不会影响到对方。此外,观察者模式还支持广播通信,即Subject可以同时通知多个Observer。

二、示例

下面是一个使用观察者模式的示例。假设有一个天气主题,它会随着天气的变化通知所有的观察者。观察者可以是显示天气的页面或者是发送短信的手机应用程序。

定义Subject接口

首先,我们需要定义Subject接口,它定义了注册、移除和通知观察者的方法:

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);}

实现具体的Subject

然后,我们实现具体的Subject类,它维护了一个观察者列表,当它的状态发生改变时,会通知所有观察者::

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();    }}

实现具体的Observer

最后,我们实现具体的Observer类,它实现了Observer接口的update方法,当它接收到通知时,会更新自己的状态:

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";    }}

在这个示例中,WeatherData类是Subject,它维护了一个观察者列表,并实现了注册、移除和通知观察者的方法。CurrentConditionsDisplay类是具体的观察者,它实现了Observer接口的update方法,当它接收到通知时,会更新自己的状态并调用display方法显示当前的天气信息。

使用观察者模式的主要步骤如下:

定义Subject接口,其中包含注册、移除和通知观察者的方法。定义Observer接口,其中包含接收通知的方法。实现具体的Subject类,维护观察者列表,并实现注册、移除和通知观察者的方法。实现具体的Observer类,实现接收通知的方法并更新自己的状态。在主程序中,创建具体的Subject和Observer对象,将Observer对象注册到Subject对象中,当Subject的状态发生改变时,通知所有注册的Observer对象。
责任编辑:{ij7}

    为您推荐

  • 【环球热闻】PHP面向对象的设计模式-观察者模式

    观察者模式是一种行为设计模式,它定义了对象之间的一种一对多的依赖关系,当一个对象状态发生改变时,所有
  • 数字人民币产业联盟:新增26家 打造数字中国创新联合体典范-环球聚焦

    【数字人民币产业联盟:新增26家打造数字中国创新联合体典范】4月28日下午,第六届数字中国建设峰会2023年
  • 开局首季!看中国经济“成绩单”|澎湃活力 民营企业看“浙”里

    一季度,我国民营经济对经济复苏的贡献显著。全国登记在册民营企业数量超过4900万户,民营企业在企业总量中
  • 4-2拿下灰熊!湖人自2020年泡泡园区夺冠后首次赢下季后赛系列赛

    直播吧4月29日讯季后赛首轮G6,湖人战胜灰熊,大比分4-2晋级次轮。据统计,这是湖人自2020年泡泡园区夺冠后
  • 克宫:黑海农产品外运协议延长前景不乐观-焦点资讯

    如不能正常浏览请选用IE浏览器  天津北方网讯:克宫:黑海农产品外运协议延长前景不乐观……
  • “五一”假期开启 全国交通迎来客流高峰

    如不能正常浏览请选用IE浏览器  天津北方网讯:“五一”假期开启全国交通迎来客流高峰……
  • 山东:门票预约火爆 泰山景区开通新旅游线路

    如不能正常浏览请选用IE浏览器  天津北方网讯:山东:门票预约火爆泰山景区开通新旅游线路……
  • 河南安阳:彰显汉魏风韵 高陵遗址博物馆今天开放

    如不能正常浏览请选用IE浏览器  天津北方网讯:河南安阳:彰显汉魏风韵高陵遗址博物馆今天开放……
  • 朝鲜严厉批评美韩《华盛顿宣言》_环球新消息

    朝中社29日报道,朝鲜劳动党中央委员会副部长金与正28日通过朝中社发表声明,严厉批评美国和韩国日前发表的
  • 5月券商金股组合陆续更新 多只年内“明星股”获券商追捧

    【5月券商金股组合陆续更新多只年内“明星股”获券商追捧】截至目前,已经有开源证券、东北证券、国联证券
  • 威海产业投资集团:2023年一季报净利润发生亏损|全球报道

    威海产业投资集团:2023年一季报净利润发生亏损
  • 迎“五一”保畅通 西安公路人这样“排兵布阵”

    2023年“五一”假期,据预测西安市国省干线公路路网流量整体将会明显增加。为做好公路交通服务保障工作,西
  • “五一”假期旅游市场将迎高峰 预计旅游人次达24000万人次 世界微动态

    今天是“五一”假期第一天,记者从中国旅游研究院了解到,今年“五一”假期旅游人次有望突破2019年同期水平
  • 打卡陕西考古博物馆:专家带你去考古

    作为全国首座考古学科专题博物馆,陕西考古博物馆在开馆一年来“圈粉”无数。在这里,游客可以亲手触摸史前
  • 歌颂者-世界快播报

    1、《歌颂者》是由吴青峰作词、作曲并演唱的一首歌曲,该曲于2019年4月12日晚在《歌手2019》的歌王之战上首唱,
  • 每日聚焦:蘑菇头男发型_蘑菇头男

    1、蘑菇头是沙宣派的杰作,沙宣讲究的发行结构,打薄会破坏结构,所以沙宣派的发型师们都是一把平剪操作完
  • 开局首季!看中国经济“成绩单”| 增资加码 分享中国发展红利_每日热文

    从中国发展高层论坛到博鳌亚洲论坛,由北及南,外企高管们陆续来华,在这个春天里,活跃在各大经贸论坛、工
  • 新华网三评“假期旅游”:让堵心变顺心、让流量变“留量”、让过客变常客|热点在线

    疫情过后的这个五一长假,人们期待已久。各项数据显示,五一期间,人们出游热情高涨,各大景区都将迎来客流
  • 今日热搜:触摸数字、感知数字 “AI+智慧”产品亮点突出

    点击图片观看视频  第六届数字中国建设峰会4月27日开幕,作为数字中国建设峰会的重要组成部分,数字中国
  • 助力高质量发展:数字中国建设按下“快进键”-天天热头条

    宣纸铺就,握笔蘸墨,笔触轻盈而又遒劲地写下名列前茅四个大字这是科大讯飞股份有限公司自主研发的AI书法机
  • 开局首季!看中国经济“成绩单”|澎湃活力 民营企业看“浙”里 环球快播报

    一季度,我国民营经济对经济复苏的贡献显著。全国登记在册民营企业数量超过4900万户,民营企业在企业总量中
  • 焦点简讯:若羽臣2022年财报:营收12.17亿元 扣非净利同比增长64.73%

    若羽臣2022年财报:营收12 17亿元扣非净利同比增长64 73%2023-04-2911:32来源:证券日报网本报记者李雯珊见
  • 出发前必看!忘带身份证,可以这样解决→_当前热议

    “五一”假期你是不是已经做好了计划,准备外出去旅行?乘飞机、坐火车时忘拿身份证怎么办?火车上哪些东西
  • 每日速看!【地评线】东湖评论:让文明旅游成为美好假期的“通行证”

    东湖评论:让文明旅游成为美好假期的“通行证”---“五一”小长假已来,春光不负。不少市民朋友、青年群体
  • 每日关注!京沪高铁(601816):23Q1归母净利润高增至22.26亿元 看好短期修复弹性及中长期量价空间

    京沪高铁(601816):23Q1归母净利润高增至22 26亿元看好短期修复弹性及中长期量价空间
  • 第十三届北京国际电影节创投终审路演,“眼保健操虚拟拍摄共创计划”正式启动|全球新资讯

    眼保健操制作(北京)团队携项目《焦糖3号》抵达北影节项目创投终审路演现场。导演、编剧赵云龙于现场分享
  • 今日快讯:“五一”假期厦门火车站预计发送旅客92万人:加开多趟列车 满足旅客出行需求

    随着“五一”假期的到来,厦门火车站将开启大客流模式。记者了解到,从昨天开始到5月4日,厦门火车站预计发
  • 河南新野纺织股份有限公司 2023年第一季度报告_世界时快讯

    证券代码:002087证券简称:新野纺织公告编号:2023-019号河南新野纺织股份有限公司关于公司股票交易被实行
  • 【环球报资讯】河南华英农业发展股份有限公司 2023年第一季度报告

    证券代码:002321证券简称:ST华英公告编号:2023-019本公司及董事会全体成员保证信息披露的内容真实、准确
  • “五一”假期旅游市场将迎高峰 预计旅游人次达24000万人次

    今天是“五一”假期第一天,记者从中国旅游研究院了解到,今年“五一”假期旅游人次有望突破2019年同期水平

相关推荐

  • 【环球热闻】PHP面向对象的设计模式
  • 数字人民币产业联盟:新增26家 打
  • 开局首季!看中国经济“成绩单”|
  • 4-2拿下灰熊!湖人自2020年泡泡园区
  • 克宫:黑海农产品外运协议延长前景
  • “五一”假期开启 全国交通迎来客
  • 山东:门票预约火爆 泰山景区开通
  • 河南安阳:彰显汉魏风韵 高陵遗址
  • 朝鲜严厉批评美韩《华盛顿宣言》_环
  • 5月券商金股组合陆续更新 多只年内

阅读排行

  • 华金证券:给予盛路通信增持评级
  • 河北大学新增化学生物学本科专业 今日热门
  • 河北工程大学举行廉政教育基地揭牌仪式-全球最资讯
  • 辽宁大学新结构经济学研究中心揭牌
  • 东北大学获首批省教育厅“数字职教”研发中心
  • 每日关注!东北大学获得2025年中国矿物加工大会主办权
  • 哈尔滨工业大学两项目获2023年度国家出版基金资助
  • 黑龙江大学与山东新汇建设集团有限公司合作协议签约仪式
  • 世界要闻:仰望红绿灯起步加速果然快 痛击自家兄弟比亚迪汉EV
  • 国家统计局:一季度规模以上文化企业实现营业收入同比增长4.0%-全球通讯

291 32 36@qq.com

Copyright © 1998-2015 by 中国北京网版权 所有 京ICP备12018864号-3

营业执照公示信息