PHP中的观察者模式如何工作?

王林
发布: 2024-05-21 10:39:01
原创
790人浏览过

php 中的观察者模式是一种设计模式,允许观察者订阅主题的状态变化并做出响应。当主题状态更改时,它会通知观察者,观察者可以相应地更新自己:主题类维护一个观察者列表并提供方法附加和删除观察者。主题类提供获取和设置状态的方法,当状态更改时触发观察者通知。观察者类定义了一个更新方法,在主题状态更改时调用。具体观察者类实现更新方法以更新自己的逻辑。在实践中,观察者订阅主题,当主题状态更改时,观察者收到通知并更新自己。

PHP中的观察者模式如何工作?

PHP 中观察者模式运作原理

简介

观察者模式是一种软件设计模式,允许对象(称为观察者)订阅其他对象(称为主题)的状态变化并对其做出响应。当主题的状态改变时,它会通知所有观察者,而观察者可以相应地更新自己。

立即学习PHP免费学习笔记(深入)”;

代码结构

在 PHP 中,我们可以使用以下类结构来实现观察者模式:

天工大模型
天工大模型

中国首个对标ChatGPT的双千亿级大语言模型

天工大模型 115
查看详情 天工大模型

主题类:

class 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 getState()
    {
        return $this->state;
    }

    public function setState($state)
    {
        $this->state = $state;
        $this->notifyObservers();
    }

    private function notifyObservers()
    {
        foreach ($this->observers as $observer) {
            $observer->update($this);
        }
    }
}
登录后复制

观察者类:

interface Observer
{
    public function update(Subject $subject);
}
登录后复制

具体观察者类:

class ConcreteObserver1 implements Observer
{
    public function update(Subject $subject)
    {
        // 更新自己的逻辑
    }
}

class ConcreteObserver2 implements Observer
{
    public function update(Subject $subject)
    {
        // 更新自己的逻辑
    }
}
登录后复制

实战案例

我们可以使用以下代码示例来说明观察者模式在实践中的应用:

$subject = new Subject();

$observer1 = new ConcreteObserver1();
$observer2 = new ConcreteObserver2();

$subject->attach($observer1);
$subject->attach($observer2);

$subject->setState('New state'); // 触发更新

// 观察者收到更新并相应更新自己
登录后复制

当主题的状态更新时,所有订阅它的观察者都会收到通知并相应更新自己。

以上就是PHP中的观察者模式如何工作?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号