PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php观察者大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

PHP观察者模式

1、什么是观察者模式?

从面向过程的角度来看,首先是观察者向主题注册注册完之后,主题通知观察者做出相应的操作,整个事情就完了

从面向对象的角度来看,主题提供注册通知的接口,观察者提供自身操作的接口。(这些观察者拥有一个一个接口。)观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。耦合度相当之低

流程图如下:

php观察者

2、为什么要用观察者模式?

观察者模式更多体现了两个独立的类利用接口完成一件本应该很复杂的事情。不利用主题类的话,我们还需要不断循环创建实例,执行操作。而现在只需要创建实例就好,执行操作的事儿只需要调用一次通知方法就好啦

3、应用场景

一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少对象有待改变时,应该虑使用观察者模式

4、示例代码

/**
 * @purpose: 观察者接口, 定义观察者具体需要执行的方法,当然方法名和方法个数可以自定义
 * Interface Observer
 */
interface Observer
{
    /**
     * @purpose: 广播通知后,所有已注册的观察者都需要执行该方法。
     * @return mixed
     */
    public function eat();
}

/**
 * @purpse: 定义猫猫类,继承观察者接口,实现具体细节
 * Class Cat
 */
class Cat implements Observer{
    public function eat(){
        echo 'Cat eat fish';
    }
}

/**
 * @purpse: 定义狗狗类,继承观察者接口,实现具体细节
 * Class Dog
 */
class Dog implements Observer{
    public function eat(){
        echo 'Dog eat bones';
    }
}



/**
 * @purpose: 主题接口, 定义添加观察者和广播通知方法
 * Interface Notify
 */
interface Subject
{
    /**
     * @purpose: 添加观察者
     * @param String $key 给所添加的观察者的一个唯一 key,方便注册树中移除观察者
     * @param Observer $observer 观察者对象
     * @return mixed
     */
    public function addObserver($key, Observer $observer);

    /**
     * @purpose: 从注册树中移除观察者
     * @param String $key 给所添加的观察者的一个唯一 key,方便注册树中移除观察者
     * @return mixed
     */
    public function removeObserver($key);

    /**
     * @purpose: 广播通知注册的观察者
     * @return mixed
     */
    public function notify();
}

/**
 * @purpose: 实现主体接口,主要就添加观察者和广播通知观察者
 * Class Action
 */
class Action implements Subject
{
    /**
     * @var array 保存所有已注册的观察者
     */
    public $_observer = [];

    /**
     * @purpose: 添加观察者
     * @param String $key 给所添加的观察者的一个唯一 key,方便注册树中移除观察者
     * @param Observer $observer 观察者对象
     * @return mixed
     */
    public function addObserver($key, Observer $observer)
    {
        $this->_observer[$key] = $observer;
    }

    /**
     * @purpose: 从注册树中移除观察者
     * @param String $key 给所添加的观察者的一个唯一 key,方便注册树中移除观察者
     * @return mixed
     */
    public function removeObserver($key)
    {
        unset($this->_observer[$key]);
    }

    /**
     * @purpose: 广播通知注册的观察者,对注册树进行遍历,让每个对象实现其接口提供的操作
     * @return mixed
     */
    public function notify()
    {
        foreach ($this->_observer as $observer) {
            $observer->eat();
        }
    }
}

  

大佬总结

以上是大佬教程为你收集整理的php观察者全部内容,希望文章能够帮你解决php观察者所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: