php设计模式之观察者模式

这篇具有很好参考价值的文章主要介绍了php设计模式之观察者模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PHP的观察者模式是一种设计模式,用于实现对象之间的松耦合、事件驱动的通信。它基于观察者(Observer)和被观察者(Subject)之间的关系,当被观察者的状态发生改变时,观察者将自动收到通知并执行相应的操作。

在PHP中,可以使用SplSubject接口和SplObserver接口来实现观察者模式。SplSubject接口定义了被观察者必须实现的方法,包括添加、删除和通知观察者的方法。SplObserver接口定义了观察者必须实现的方法,用于接收通知并执行相关操作。

以下是一个简单的示例,说明如何在PHP中使用观察者模式:

// 定义一个被观察者类
class Subject implements SplSubject {
    private $observers = []; // 存储观察者对象
    private $state; // 被观察者的状态

    public function attach(SplObserver $observer) {
        $this->observers[] = $observer;
    }

    public function detach(SplObserver $observer) {
        $key = array_search($observer, $this->observers);
        if ($key !== false) {
            unset($this->observers[$key]);
        }
    }

    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 Observer implements SplObserver {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function update(SplSubject $subject) {
        echo "观察者 {$this->name} 收到通知,当前状态为:{$subject->getState()}\n";
    }
}

// 创建被观察者和观察者对象
$subject = new Subject();
$observer1 = new Observer("观察者1");
$observer2 = new Observer("观察者2");

// 添加观察者到被观察者的列表中
$subject->attach($observer1);
$subject->attach($observer2);

// 设置被观察者的状态并触发通知
$subject->setState("状态1");
$subject->setState("状态2");

// 从被观察者的列表中移除观察者
$subject->detach($observer1);

// 再次设置被观察者的状态并触发通知
$subject->setState("状态3");

运行以上代码将输出以下结果:

观察者 观察者1 收到通知,当前状态为:状态1
观察者 观察者2 收到通知,当前状态为:状态1
观察者 观察者1 收到通知,当前状态为:状态2
观察者 观察者2 收到通知,当前状态为:状态2
观察者 观察者2 收到通知,当前状态为:状态3

这个例子中,Subject类表示被观察者,Observer类表示观察者。当被观察者的状态发生改变时,它会通知所有注册的观察者,并执行相应的操作。观察者通过实现update()方法来接收并处理通知。

在示例中,两个观察者订阅了被观察者的通知。当被观察者的状态发生改变时,两个观察者都会收到通知并输出当前状态。之后,一个观察者被从被观察者的列表中移除,再次改变被观察者的状态时,只有一个观察者收到通知并输出当前状态。

通过使用观察者模式,可以实现对象之间的解耦和灵活的事件通信机制。被观察者不需要直接知道观察者的存在,只需将通知发送给所有注册的观察者即可。这使得代码更加易于维护和扩展,因为可以动态地添加或移除观察者而不影响其他部分的代码。文章来源地址https://www.toymoban.com/news/detail-491430.html

到了这里,关于php设计模式之观察者模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式---观察者模式

    1,概念         属于行为模式的一种,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一对象主题对象,这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。 在观察者模式中有如下角色: Subject:抽象主题(抽象被观察者),

    2024年02月15日
    浏览(50)
  • 设计模式——14. 观察者模式

    观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都能够自动收到通知并更新自己的状态,以保持与被观察对象的同步。观察者模式也被称为发布-订阅模式。 观察者模式包含以

    2024年02月07日
    浏览(35)
  • 设计模式之观察者模式

    可以帮你的对象知悉现况,不会错过该对象感兴趣的事。对象甚至在运行时可决定是否要继续被通知。 从报纸和杂志的订阅说起: 报社的业务就是出版报纸 向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸。 当你不

    2024年01月24日
    浏览(41)
  • 重温设计模式 --- 观察者模式

    观察者模式 是一种行为型设计模式,它允许对象之间建立一种一对多的关系,使得当一个对象状态改变时,所有依赖它的对象都能够自动得到通知并更新自己的状态。该模式可以帮助我们实现松耦合的系统,以便更好地应对变化和扩展。 在观察者模式中,有两个角色: 观察

    2024年02月13日
    浏览(44)
  • 设计模式(11)观察者模式

    一、概述: 1、定义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 2、结构图: 实现  调用

    2024年02月11日
    浏览(36)
  • 观察者设计模式

    行为型模式(Behavioral Patterns):这类模式主要关注对象之间的通信。它们 分别是: 职责链模式(Chain of Responsibility) 命令模式(Command) 解释器模式(Interpreter) 迭代器模式(Iterator) 中介者模式(Mediator) 备忘录模式(Memento) 观察者模式(Observer) 状态模式(State) 策略

    2024年01月24日
    浏览(35)
  • 设计模式-观察者

    观察者模式是一种广泛应用于软件开发中的行为设计模式,尤其是在面向对象编程(OOP)中。该模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新 在观察者模式中,存在两个主要角色: 主题(Subject) 或 被

    2024年01月22日
    浏览(33)
  • 设计模式:行为型模式 - 观察者模式

    定义: 又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。 在观察者模式中有如下角色: Subject:抽象主题(抽象被观察

    2023年04月22日
    浏览(84)
  • js设计模式:观察者模式

    和发布订阅模式基本类似。 当某一对象状态发生变化时,所有的观察者都会收到通知。 vue响应式原理就是很经典的案例,数据发生变化,通知各个依赖。

    2024年02月19日
    浏览(20)
  • 设计模式之二:观察者模式

    假定我们需要为Weather-O-Rama公司建立一个气象站系统,除已有的WeatherData有数据源类,还需要更新三个布告板的显示:目前状况(温度、湿度、气压)、气象统计和天气预报。  1 以下是一个可能的实现 上述实现有以下问题存在: 针对具体实现编程,而非针对接口(currentCon

    2024年02月13日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包