PHP 调查者模式   
               添加时间:2013-5-10 点击量: 
 
              
//被察者抽象类
class Observed implements SplSubject{
    protected ¥_name;
    protected ¥_observers;
    //实例化,生成一个调查者对象
    public function __construct(){
        ¥this->_observers = new SplObjectStorage();
    }
    // 添加调查者对象
    public function attach(SplObserver ¥observer){
        ¥this->_observers->attach(¥observer);
    }
    //删除观者对象
    public function detach(SplObserver ¥observer){
        ¥this->_observers->detach(¥observer);
    }
    //通知消息
    public function notify(){
        foreach(¥this->_observers as ¥observer){
            ¥observer->showMessage(¥this);
        }
    }
    //通俗办法: 设置值
    public function setName(¥name){
        ¥this->_name = ¥name;
        ¥this->notify();
    }
    //通俗办法: 获取值
    public function getName(){
        return ¥this->_name;
    }
    //通俗办法:设置春秋
    public function setAge(¥age){
        ¥this->age = ¥age;
        foreach(¥this->_observers as ¥observer){
            ¥observer->showAge(¥this->_name,¥this->age);
        }
    }
}
// 调查者抽象类
class Observer implements SplObserver{
    //显示消息提示
    public function showMessage(SplSubject ¥obj){
        ¥user = ¥obj->getName();
        if(¥user===admin){
            echo 您好, ,¥user,迎接您进入经管后台<br/>;
        }else{
            echo 你好, ¥user 你已经被添加到了用户列表<br/>;
        }
    }
    //这是持续父类的抽象办法
    public function (SplSubject ¥subject) {}
    //显示小我春秋
    public function showAge(¥name,¥age){
        echo <script>alert(¥name 的春秋是: ¥age)</script>;
    }
}
¥subject = new Observed();  //生成一个被调查者对象
¥observer = new Observer(); //生成一个调查者对象
¥subject->attach(¥observer);//把调查者传入到被调查中去
¥subject->setName(张三); //调用 setName 办法
/
  经由过程面的 setName 就会调用  ¥this->notify();
 经由过程调用  ¥this->notify()就会调用 ¥observer->showMessage(¥this)办法,
 即每个调查者对象的 showMessage(¥obj)办法;
/
¥subject->setName(admin);
¥subject->setAge(24);
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》
                     
                  
     
  
 
    
    
//被察者抽象类
class Observed implements SplSubject{
protected ¥_name;
protected ¥_observers;
//实例化,生成一个调查者对象
public function __construct(){
¥this->_observers = new SplObjectStorage();
}
// 添加调查者对象
public function attach(SplObserver ¥observer){
¥this->_observers->attach(¥observer);
}
//删除观者对象
public function detach(SplObserver ¥observer){
¥this->_observers->detach(¥observer);
}
//通知消息
public function notify(){
foreach(¥this->_observers as ¥observer){
¥observer->showMessage(¥this);
}
}
//通俗办法: 设置值
public function setName(¥name){
¥this->_name = ¥name;
¥this->notify();
}
//通俗办法: 获取值
public function getName(){
return ¥this->_name;
}
//通俗办法:设置春秋
public function setAge(¥age){
¥this->age = ¥age;
foreach(¥this->_observers as ¥observer){
¥observer->showAge(¥this->_name,¥this->age);
}
}
}
// 调查者抽象类
class Observer implements SplObserver{
//显示消息提示
public function showMessage(SplSubject ¥obj){
¥user = ¥obj->getName();
if(¥user===admin){
echo 您好, ,¥user,迎接您进入经管后台<br/>;
}else{
echo 你好, ¥user 你已经被添加到了用户列表<br/>;
}
}
//这是持续父类的抽象办法
public function (SplSubject ¥subject) {}
//显示小我春秋
public function showAge(¥name,¥age){
echo <script>alert(¥name 的春秋是: ¥age)</script>;
}
}
¥subject = new Observed(); //生成一个被调查者对象
¥observer = new Observer(); //生成一个调查者对象
¥subject->attach(¥observer);//把调查者传入到被调查中去
¥subject->setName(张三); //调用 setName 办法
/
经由过程面的 setName 就会调用 ¥this->notify();
经由过程调用 ¥this->notify()就会调用 ¥observer->showMessage(¥this)办法,
即每个调查者对象的 showMessage(¥obj)办法;
/
¥subject->setName(admin);
¥subject->setAge(24);
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》




