美文网首页
设计模式(三行为模式)

设计模式(三行为模式)

作者: X1_blog | 来源:发表于2020-04-30 17:14 被阅读0次

    观察者模式

    构成

    抽象被观察者 + 具体被观察者 + 抽象观察者 + 具体观察者

    定义

    被观察者具有修改观察列表 + 通知观察列表成员的能力, 观察者收到通知后对指定数据进行修改

    DEMO

    /*观察者模式*/
    interface subject{  // 抽象被观察者
        function addObservers(concreteObserver $observer);
        function delObservers(concreteObserver $observer);
        function doNotify();
    }
    //  具体被观察者
    class concreteSubject implements subject
    {
        private $_observerList = [];
        public function addObservers(concreteObserver $observer){
            if(array_search($observer,$this->_observerList)===false){
                $this->_observerList[] = $observer ;
            }
        }
        function delObservers(concreteObserver $observer){
            $key = array_search($observer,$this->_observerList) ;
            if($key!==false){
                unset($this->_observerList[$key]);
            }
        }
        function doNotify(){
            foreach ($this->_observerList as $observer) {
                $observer->update();
            }
        }
    }
    
    interface observer{ // 抽象观察者
        function update();
    }
    
    
    class concreteObserver implements observer    //  具体观察者
    {
        private $name ;
        function __construct($name)
        {
            $this ->name= $name;
        }
        function update(){
            echo $this ->name ." is update\n";
        }
    }
    
    
    class client
    {
        static function main()
        {
            $subject = new concreteSubject();
            $observerA = new concreteObserver('observerA');
            $observerB = new concreteObserver('observerB');
            $observerC = new concreteObserver('observerC');
            $subject->addObservers($observerA);
            $subject->addObservers($observerB);
            $subject->addObservers($observerC);
            echo "first notify: \n";
            $subject->doNotify();
            $subject->delObservers($observerC);
            echo "second notify: \n";
            $subject->doNotify();
        }
    }
    client::main();
    
    

    相关文章

      网友评论

          本文标题:设计模式(三行为模式)

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