zoukankan      html  css  js  c++  java
  • php设计模式之观察者模式

    <?php
    /**
     * @desc 利用观察者模式,实现不同用户进入显示不同的内容
     * 1.主题
     * 2.观察者接口
     * 3.观察者
     * ***/
    interface Observer{
        
        //添加观察者对象
        public function attach($observer);
        
        //删除观察者对象
        public function detach($observer);
        
        //执行观察者需要执行的方法
        public function doIt();
            
    }
    
    class User implements Observer{
        public $obj = [];
        
        /*
        *@desc 传递的对象不在存储的obj对象中则将对象存储到obj中
        */
        public function attach($observer){
            if(!in_array($observer,$this->obj)){
                $this->obj[] = $observer;
            }
        }
        
        /**
         * @desc 取消观察者观察
         * **/
        public function detach($observer){
            $key = array_search($observer, $this->obj);
            if($key){
                unset($this->obj[$key]);
            }
        }    
        
        /***
         * @desc 获取所有被观察者的对象,执行观察
         * **/
        public function doIt(){
            if(!empty($this->obj)){
                foreach ($this->obj as $v){
                    $v->active();
                }
            }
        }    
        
    }
    
    
    /**
     * @desc 观察者接口
     * **/
    interface obsUser{
        public function active();
    }
    
    
    /*
     * @实现零售店用户实现方法类
     * **/
    class storeUser implements obsUser{
        
        public function active(){
            echo "我是零售店用户
    ";
        }
        
    }
    
    /**
     * @desc 实现经销商用户方法类
     * **/
    class supplierUser implements obsUser{
    
        public function active(){
            echo "我是经销商用户
    ";
        }
    
    }
    
    /*
     * 实例化观察者接口类
     * **/
    $user = new User();
    
    //添加门店用户类到观察者对象
    $user->attach(new storeUser());
    
    //添加经销商用户类到观察者对象
    $user->attach(new supplierUser());
    
    //监控观察者动作并输出结果
    $user->doIt();
  • 相关阅读:
    jdbc连接2(不可以注入)
    大白dmeo (转的)
    管家婆系统
    RMQ求最值
    Codeforces 837E Vasya's Function 数论 找规律
    Codeforces 837D
    poj 1655 找树的重心
    HDU 4055 Number String 计数DP
    Summer training round2 #7 (Training #23)
    Summer training round2 #6 (Training #22)
  • 原文地址:https://www.cnblogs.com/lisqiong/p/6574984.html
Copyright © 2011-2022 走看看