5.php观察者模式

来源:互联网 发布:app开发用什么软件 编辑:程序博客网 时间:2024/04/30 15:25

    有些开发人员说:“WEB开发是所有开发类型中最难最复杂的。”说这句话的原因就是因为我们会面对各种不确定的因素,用户输入、平台、屏幕大小等等等等。。。。有这样一种情况,我们的产品能让用户选择不同的背景颜色,我们对各种颜色的背景经过数据分析后发现文字颜色,文字字体,文字大小都要变化才能达到最佳的效果,这些样式因数分别在不同的对象中,我们怎么让这些因数随同背景颜色变化。观察者模式就是用来在一个因素变化后通知其他对象,改变因数。

    这个类就是引起变化的类

<?phpclass Observer{    //用来保存要通知的不同对象    private static $objarray = array();    private $color;        function __construct($color){        $this->color = $color;    }        //改变参数用的方法    public function changcolor($color){        $this->color = $color;        $this->call($color);    }        //添加观察者   public static function addobserver($name, $obj){       $name = strtolower($name);       self::$objarray[$name] = $obj;   }      //删除相应的观察者   public static function subtractobserver($name){       $name = strtolower($name);       if (!self::$objarray[$name]){           echo "$name对应的对象不存在";       }       unset(self::$objarray[$name]);   }       //向各个对象通知的方法   private function call($color){       foreach (self::$objarray as $key => $value) {           $value->change($color);       }   }  }//被通知的第一个对象class Object1{    function change($value){        echo "第一个对象中 要被改成$value<br/>";    }}//被通知的第二个对象class Object2{    function change($value){        echo "第一个对象中 要被改成$value";    }}
    调用过程有点复杂

//创建引起变化对象$observer = new Observer("#ccc");//创建第一个被变化的对象$obj1 = new Object1();//创建第二个被变化的对象$obj2 = new Object2();//向引起变化的对象中添加对象Observer::addobserver('Object1', $obj1);Observer::addobserver('Object2', $obj2);//尝试引起因素的变化$observer->changcolor('#abcdef');//尝试删除一个对象后是否还有效echo "<br/>";Observer::subtractobserver('Object1');$observer->changcolor('red');
     这就是传说中的观察者。其实我觉的这个设计模式名字没有起好,应该叫推送者更合适。


0 0
原创粉丝点击