• PHP 观察者模式


    PHP 观察者模式

     

    观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。

    场景:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码
    观察者模式实现了低耦合,非侵入式的通知与更新机制

    复制代码
    /**
     * 事件产生类
     * Class EventGenerator
     */
    abstract class EventGenerator
    {
        private $ObServers = [];
    
        //增加观察者
        public function add(ObServer $ObServer)
        {
            $this->ObServers[] = $ObServer;
        }
    
        //事件通知
        public function notify()
        {
            foreach ($this->ObServers as $ObServer) {
                $ObServer->update();
            }
        }
    
    }
    
    /**
     * 观察者接口类
     * Interface ObServer
     */
    interface ObServer
    {
        public function update($event_info = null);
    }
    
    /**
     * 观察者1
     */
    class ObServer1 implements ObServer
    {
        public function update($event_info = null)
        {
            echo "观察者1 收到执行通知 执行完毕!
    ";
        }
    }
    
    /**
     * 观察者1
     */
    class ObServer2 implements ObServer
    {
        public function update($event_info = null)
        {
            echo "观察者2 收到执行通知 执行完毕!
    ";
        }
    }
    
    /**
     * 事件
     * Class Event
     */
    class Event extends EventGenerator
    {
        /**
         * 触发事件
         */
        public function trigger()
        {
            //通知观察者
            $this->notify();
        }
    }
    
    //创建一个事件
    $event = new Event();
    //为事件增加旁观者
    $event->add(new ObServer1());
    $event->add(new ObServer2());
    //执行事件 通知旁观者
    $event->trigger();
    复制代码
    世事洞明皆学问
  • 相关阅读:
    SpringBoot系列之缓存使用教程
    Dubbo系列之常用配置用法简介
    SpringBoot系列之集成Dubbo的方式
    JavaScript系列之回调函数callback
    JavaScript系列之事件冒泡机制简介
    Oracle基础之保留字和关键字
    Oracle调优之no_unnest和unnest用法简介
    InnoSetup 以命令行自动编译打包
    InnoSetup 脚本打包及管理员权限设置
    C# 获取系统当前IE版本号
  • 原文地址:https://www.cnblogs.com/Json159/p/10291761.html
Copyright © 2020-2023  润新知