• 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();   # 开盘了
    

      

      

  • 相关阅读:
    java+selenium+testNG+excel 实现 web 网页的自动化测试
    LoadRunner测试下载功能点脚本(方法一)
    学习ajax总结
    多行文本溢出 省略号显示
    angular 中表单验证的探索
    关于ngModelOptions用法总结 让校验不过的验证绑定ngModel
    柯里化学习
    call、aply、bind的常用方法总结
    为什么我获取不到这个css样式?js原生获取css样式总结
    文本溢出省略号显示时,水平位置发生偏移
  • 原文地址:https://www.cnblogs.com/moxiaoan/p/6245046.html
Copyright © 2020-2023  润新知