5.php观察者模式

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

    这个类就是引起变化的类

<?php
class 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');
     这就是传说中的观察者。其实我觉的这个设计模式名字没有起好,应该叫推送者更合适。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值