zoukankan      html  css  js  c++  java
  • 观察者模式

    观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象(A对象)事件发生时通知多个 ‘观察者’,即观察A对象的其他对象。

    代码示例

    注:PHP 中包含几个内置接口 SplSubject SplObserver 它们能让你的观察器模式实现与其他 PHP 代码兼容

    <?php
    
    class subject implements SplSubject
    {
        public $state;
    
        //存储订阅者,通知时候遍历使用
        private $observers;
    
        public function __construct()
        {
            $this->observers = new SplObjectStorage();
        }
    
        //添加订阅对象
        public function attach(SplObserver $observer)
        {
            // TODO: Implement attach() method.
            $this->observers->attach($observer);
        }
        
        //删除订阅对象
        public function detach(SplObserver $observer)
        {
            // TODO: Implement detach() method.
            $this->observers->detach($observer);
        }
        
        //遍历通知订阅者
        public function notify()
        {
            // TODO: Implement notify() method.
            foreach ($this->observers as $observer){
                $observer->update($this);
            }
        }
        
        //业务逻辑,业务变更时通知关联业务作出对应变更
        public function someBusinessLogic()
        {
            //模仿业务变更
            $this->state = mt_rand(0,10);
            
            //通知订阅者
            $this->notify();
        }
    }
    
    //订阅者A
    class  concreateObserverA implements SplObserver
    {
        public function update(SplSubject $subject)
        {
            // TODO: Implement update() method.
            echo 'A 关联业务变更';
        }
    }
    
    //订阅者B
    class  concreateObserverB implements SplObserver
    {
        public function update(SplSubject $subject)
        {
            // TODO: Implement update() method.
            echo 'B 关联业务变更';
        }
    }
    
    //客户端
    $subject = new subject();
    
    $conA = new concreateObserverA();
    //添加订阅者A
    $subject->attach($conA);
    
    $conB = new concreateObserverB();
    //添加订阅者B
    $subject->attach($conB);
    
    //业务逻辑变更后,通知订阅者使订阅者逻辑变更
    $subject->someBusinessLogic();
  • 相关阅读:
    Postgresql主从流复制+Redis集群部署
    数据仓库实时数据同步方案
    数据库与WEB服务器的配置
    HOSTS文件
    Android 命令设置获取、IP地址、网关、dns
    转:mysqld与mysqld_safe的区别
    mysql 5.7 创建用户报错ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
    MySql 5.7中添加用户,新建数据库,用户授权,删除用户,修改密码
    监控网卡设备流量
    获取进程所有信息
  • 原文地址:https://www.cnblogs.com/suojian/p/14023448.html
Copyright © 2011-2022 走看看