• PHP 观察者模式


    观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

    【观察者模式中主要角色】

    1.抽象主题(Subject)角色: 抽象主题提供了增加,删除观察者,通知观察者对象的接口。
    2.抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在观察的主题发生改变时更新自己。
    3.具体主题(ConcreteSubject)角色:存储相关状态到具体观察者对象,当具体主题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色是抽象主题(Subject)角色实现。
    4.具体观察者(ConcretedObserver)角色:实现抽象观察者角色(Observer)所要求的更新接口。

    主题也可以理解为被观察者,就像赌场的每个场子一样,而观察者就是每个场子里的赌徒,当每个场子的荷官摇完骰子,赌徒们都会有一系列的动作。

    【观察者模式PHP示例】

    interface Subject{                       # 赌场的环境能干什么
        public function attach($observer);  # 来赌徒
        public function detach($observer);  # 赌徒走了
        public function doIt();              # 开盘了
    }
    
    class ConcreteSubject implements  Subject {   # 赌场的一个桌子
        public $obj = [];
    
        public function attach($observer){
            if(!in_array($observer,$this->obj)){
                $this->obj[] = $observer;
            }
        }
    
        public function detach($observer){
            $key = array_search($observer,$this->obj);
            if($key){
                unset($this->obj[$key]);
            }
        }
    
        public function doIt(){
            if(!empty($this->obj)){
                foreach ($this->obj as $v){
                    $v->go();
                }
            }
        }
    }
    
    
    interface Observer{    # 赌场的人能干什么
        public function go();
    }
    
    
    class ConcreteObserver1 implements Observer {  # 赌徒1
    
        public function go(){
            echo "我压大";
        }
    }
    
    
    class ConcreteObserver2 implements Observer {  # 赌徒2
    
        public function go(){
            echo "我压小";
        }
    }
    
    $subject = new ConcreteSubject();
    $observer1 = new ConcreteObserver1();
    $observer2 = new ConcreteObserver2();
    $subject->attach($observer1);   # 赌徒1过来了
    $subject->attach($observer2);   # 赌徒2过来了
    $subject->doIt();   # 开盘了
    

      

      

  • 相关阅读:
    用Python打造一款文件搜索工具,所有功能自己定义!
    Python+Excel+Word一秒制作百份合同
    只需6行代码,Python将PPT转为Word!
    老板让我从几百个Excel中查找数据,我用Python一分钟搞定!
    爬虫遇到头疼的验证码?Python实战讲解弹窗处理和验证码识别
    SoftEther服务端配置
    SoftEther服务端安装
    nginx学习
    zookeeper安装
    prometheus监控之自动发现
  • 原文地址:https://www.cnblogs.com/moxiaoan/p/6245046.html
Copyright © 2020-2023  润新知