美文网首页
观察者模式

观察者模式

作者: 零一间 | 来源:发表于2017-08-09 08:50 被阅读42次
    <?php
    
    /*
    观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。
    
    场景:
    一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码
    观察者模式实现了低耦合,非侵入式的通知与更新机制
    */
    
    /**
     * 事件生成类
     * Class EventGenerator
     */
    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();
    }
    
    class Observer1 implements Observer{
    
        public function update() {
            echo 'Observer1 ... ';
        }
    }
    
    class Observer2 implements Observer{
    
        public function update() {
            echo 'Observer2 ... ';
        }
    }
    
    //$eg = new EventGenerator();
    //$eg->add(new Observer1());
    //$eg->add(new Observer2());
    //$eg->notify();
    
    /**
     * 事件通知
     * Class Event
     */
    class Event extends EventGenerator{
        public  function trigger(){
            $this->notify();
        }
    }
    
    $e = new Event();
    $e->add(new Observer1());
    $e->add(new Observer2());
    $e->trigger();
    

    相关文章

      网友评论

          本文标题:观察者模式

          本文链接:https://www.haomeiwen.com/subject/cllfrxtx.html