iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中的观察者模式是什么意思
  • 125
分享到

PHP中的观察者模式是什么意思

2023-06-20 12:06:29 125人浏览 八月长安
摘要

本篇内容主要讲解“PHP中的观察者模式是什么意思”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php中的观察者模式是什么意思”吧!观察者,貌似在很多科幻作品中都会有这个角色的出现。比如我很喜欢的

本篇内容主要讲解“PHP中的观察者模式是什么意思”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习php中的观察者模式是什么意思”吧!

观察者,貌似在很多科幻作品中都会有这个角色的出现。比如我很喜欢的一部美剧《危机边缘》,在这个剧集中,观察者不停的穿越时空记录着各种各样的人或事。但是,设计模式中的观察者可不只是站在边上看哦,这里的观察者是针对主体发生的状态改变来做出对应的动作。

Gof类图及解释

GoF定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

GoF类图:

PHP中的观察者模式是什么意思

代码实现

interface Observer{    public function update(Subject $subject): void;}

观察者的抽象接口,没啥可说的吧,就是让你实现一个具体的Update就可以了

class ConcreteObserver implements Observer{    private $observerState = '';    function update(Subject $subject): void    {        $this->observerState = $subject->getState();        echo '执行观察者操作!当前状态:' . $this->observerState;    }}

具体的观察者,实现update()方法,这里我们拿到了Subject类,从而可以获得其中的状态

class Subject{    private $observers = [];    private $stateNow = '';    public function attach(Observer $observer): void    {        array_push($this->observers, $observer);    }    public function detach(Observer $observer): void    {        $position = 0;        foreach ($this->observers as $ob) {            if ($ob == $observer) {                array_splice($this->observers, ($position), 1);            }            ++$position;        }    }    public function notify(): void    {        foreach ($this->observers as $ob) {            $ob->update($this);        }    }}

Subject父类,维护一个观察者数组,然后有添加、删除以及循环遍历这个数组的方法,目的是能够方便的管理所有的观察者

class ConcreteSubject extends Subject{    public function setState($state)    {        $this->stateNow = $state;        $this->notify();    }    public function getState()    {        return $this->stateNow;    }}

Subject的实现类,只是更新了状态,在这个状态发生改变的时候,调用观察者遍历的方法进行所有观察的update()操作

  • 观察者,其实就是自身做了一个更新(update),而Subject,可以批量的执行观察者,请注意,我们不需要去修改目标类中的任何代码,只需要从外部添加就可以了,所以就让目标和观察者解耦互相之间不用关心对方的情况了

  • 观察者可以记录目标的状态,也可以不用记录,比如我们发完短信后的数据库更新或者插入操作,只有短信接口发送成功后我们再修改短信数据的状态就可以了,不一定完全需要将目标的发送状态传送给观察者

  • 当一个类在发生改变时,不知道可能会对其他多少类产生影响,这个时候观察者非常有用

  • 观察者模式中还是存在着耦合,那就是目标类中有一个观察者对象列表,如果观察者没有实现update()方法,那么就会出现问题

接着拿我们的手机工厂说事儿,这次好嘛,被一帮山寨机盯上了(观察者),我出什么功能(状态更新),他们就对应的出一样的功能(更新),而且还在我的基础上做了更多的东西,美其名曰:微创新!你说气人不气人。好吧,我也派出了一帮市场调查人员(观察者),去帮我观察别人家的手机都出了什么功能(状态更新),然后我们也照搬过来搞点微创新,大家共同进步嘛!!

完整代码:https://GitHub.com/zhangyue0503/designpatterns-php/blob/master/06.observer/source/observer.php

实例

这次我们从订单说起,不过还是有短信发送的事儿。当一般的电商平台有人下单之后,需要做的事情非常多,比如修改库存、发送短信或者推送告诉商家有人下单了,告诉买家下单成功了,支付成功了。总之就是一件事情的发生会导致各种事件的产生。其实,这里就引出了另一个非常出名的模式订阅发布模式。这个模式可以说是观察者的升级模式,这个系列的文章不会细讲,但是大家可以去看看Laravel中的发布订阅事件监听方面的内容。

订单售出类图

PHP中的观察者模式是什么意思

完整源码Https://github.com/zhangyue0503/designpatterns-php/blob/master/06.observer/source/order-observer.php

interface Observer{    public function update($obj);}class Message implements Observer{    //....    function update($obj)    {        echo '发送新订单短信(' . $obj->mobile . ')通知给商家!';    }    //....}class Goods implements Observer{    //....    public function update($obj)    {        echo '修改商品' . $obj->goodsId . '的库存!';    }    //....}class Order{    private $observers = [];    public function attach($ob)    {        $this->observers[] = $ob;    }    public function detach($ob)    {        $position = 0;        foreach ($this->observers as $ob) {            if ($ob == $observer) {                array_splice($this->observers, ($position), 1);            }            ++$position;        }    }    public function notify($obj)    {        foreach ($this->observers as $ob) {            $ob->update($obj);        }    }    public function sale()    {        // 商品卖掉了        // ....        $obj = new stdClass();        $obj->mobile = '13888888888';        $obj->goodsId = 'Order11111111';        $this->notify($obj);    }}$message = new Message();$goods = new Goods();$order = new Order();$order->attach($message);$order->attach($goods);// 订单卖出了!!$order->sale();

说明

  • 我们没有完全的遵守GoF类图,虽说GoF是圣经,但也并不是我们必须要完全遵守的,我们可以针对具体的业务情况进行合适的裁剪使用

  • 订单状态通过sale()方法产生变化后,直接调用notify方法进行观察者的调用

  • 发短信、发推送都可以拆开由一个一个的观察者来实现,这些观察者不一定只有这一个方法,但只要实现共同的接口就可以了

  • 商品库存和消息发送其实就是两个本身完全不沾边的类,但它们只需要实现一样的接口就好啦

  • PHP的SPL扩展中已经为我们准备好了一套观察者接口,大家可以试试哦,使用原生支持的观察者模式能省不少事儿呢!

到此,相信大家对“PHP中的观察者模式是什么意思”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: PHP中的观察者模式是什么意思

本文链接: https://www.lsjlt.com/news/296766.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP中的观察者模式是什么意思
    本篇内容主要讲解“PHP中的观察者模式是什么意思”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP中的观察者模式是什么意思”吧!观察者,貌似在很多科幻作品中都会有这个角色的出现。比如我很喜欢的...
    99+
    2023-06-20
  • PHP中的观察者模式是什么
    这篇文章主要讲解了“PHP中的观察者模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中的观察者模式是什么”吧!介绍现在有两派,有的人建议使用设计模式,有的人不建议使用设计模式!...
    99+
    2023-06-20
  • java观察者模式是什么
    本篇内容介绍了“java观察者模式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!观察者模式① 观察者模式的概念观察者模式(Observ...
    99+
    2023-06-19
  • java的观察者模式是什么
    这篇文章主要讲解了“java的观察者模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java的观察者模式是什么”吧!消息队列(MQ),一种能实现生产...
    99+
    2024-04-02
  • Java编程中的观察者模式是什么
    这篇文章主要介绍“Java编程中的观察者模式是什么”,在日常操作中,相信很多人在Java编程中的观察者模式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java编程中的观察者模式是什么”的疑惑有所帮助!...
    99+
    2023-05-30
    java
  • PHP设计模式(观察者模式)
    PHP 设计模式之观察者模式 介绍 现在有两派,有的人建议使用设计模式,有的人不建议使用设计模式! 这就向写文章一样,有的人喜欢文章按照套路走,比如叙事性质的文章,时间,地点,人物,...
    99+
    2024-04-02
  • PHP设计模式中观察者模式详解
    目录简介适用场景缺点补充代码(自定义实现)简介 观察者模式是行为型模式的一种,定义了对象间一对多的关系。当对象的状态发生变化时候,依赖于它的对象会得到通知。 适用场景 类似触发钩子事...
    99+
    2022-12-20
    PHP观察者模式 PHP设计模式
  • PHP设计模式中观察者模式讲解
    目录简介适用场景优点缺点补充代码(自定义实现)代码(基于SPL实现)简介 观察者模式是行为型模式的一种,定义了对象间一对多的关系。当对象的状态发生变化时候,依赖于它的对象会得到通知。...
    99+
    2022-11-13
    PHP观察者模式 PHP设计模式
  • 解析PHP观察者模式Observer
    目录观察者模式结构图概念代码示例观察者模式结构图 概念 一个"演员"(被观察者),一群"观众"(观察者),一台"摄影机"(记录容器) 【观察者模式中主要角色】 1.抽象主题(Sub...
    99+
    2024-04-02
  • PHP中的观察者模式如何工作?
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-21
  • Android中实现观察者模式的原理是什么
    这篇文章将为大家详细讲解有关Android中实现观察者模式的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。观察者模式:A类中定义一个被观察者画家package com.exampl...
    99+
    2023-05-31
    android 观察 观察者模式
  • Java观察者模式有什么用
    这篇文章主要为大家展示了“Java观察者模式有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java观察者模式有什么用”这篇文章吧。一、观察者模式的定义和特点观察者模式的定义:指多个对象间...
    99+
    2023-06-22
  • JavaScript设计模式中的观察者模式
    目录观察者设计模式初始数据被观察者观察者观察者设计模式 观察者设计模式中分为被观察者和观察者,当被观察者触发了某个边界条件,观察者就会触发事件,这里需要俩个构造函数进行观察者设计模式...
    99+
    2024-04-02
  • Java设计模式中的观察者模式
    目录一.介绍二.场景约束三.UML类图四.示意代码(版本一)五.示意代码(版本二)六.观察者模式与发布订阅模式七.优点八.在JDK中的典型应用一.介绍 观察者模式(Observer ...
    99+
    2023-02-16
    Java观察者模式 Java设计模式
  • Java观察者模式的实现方法是什么
    Java观察者模式的实现方法如下: 定义观察者接口(Observer):观察者接口定义了观察者对象的更新方法,通常包括一个upd...
    99+
    2023-10-23
    Java
  • php如何实现观察者模式
    这篇文章主要介绍了php如何实现观察者模式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php实现观察者模式的方法:首先创建一个PHP示例文件;然后实现观察者向主题注册;最后...
    99+
    2023-06-14
  • PHP入门指南:观察者模式
    在现代软件开发中,设计模式是一种被广泛使用的概念。设计模式是存在于软件系统中的通用解决方案,它们经过测试和证明,可以帮助开发人员更高效地构建复杂的软件应用程序。观察者模式是其中一个很常见的设计模式,也是PHP开发者们需要掌握的一个重要的概念...
    99+
    2023-05-20
    PHP 入门指南 观察者模式
  • PHP设计模式之观察者模式浅析
    目录PHP观察者模式(Observer Pattern)模式结构实现步骤代码示例适用场景PHP观察者模式(Observer Pattern) 观察者模式是一种行为设计模式,它定义了一...
    99+
    2023-05-14
    PHP观察者模式 PHP 设计模式 观察者模式
  • 详解Java中的观察者模式
    详解Java中的观察者模式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更...
    99+
    2023-05-31
    java 观察 观察者模式
  • vue中怎么实现观察者模式
    vue中怎么实现观察者模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1 响应式原理让我们先从相应式原理开始。我们可以通过O...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作