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();
  • 相关阅读:
    tomcat-01-配置文件组成
    Mysql的批量导入
    Mysql优化
    没有处理的问题
    Java 实现一个带提醒的定时器
    Java 端口扫描器 TCP的实现方法
    Java 多态方法构造器执行方法
    JavaWeb 基于Session的用户登陆注销实现
    Java 访问权限控制 小结
    Java FTP下载文件以及编码问题小结
  • 原文地址:https://www.cnblogs.com/suojian/p/14023448.html
Copyright © 2011-2022 走看看