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();
  • 相关阅读:
    实验3 颜色、字符串资源使用
    存储管理实验
    内存的分配与回收
    实验三
    JavaScript事件循环机制
    Js练习代码
    学习笔记(es6 react vue)
    express中间件的理解
    es6-Promise对象学习
    iscroll插件的使用
  • 原文地址:https://www.cnblogs.com/suojian/p/14023448.html
Copyright © 2011-2022 走看看