第一次写博客,大家多多关照!欢迎拍砖哦!
我也刚学设计模式,所以记录下来。
| 
       1 
      2 
      3 
      4 
      5 
      6 
      7 
      8 
      9 
      10 
      11 
      12 
      13 
      14 
      15 
      16 
      17 
      18 
      19 
      20 
      21 
      22 
      23 
      24 
      25 
      26 
      27 
      28 
      29 
      30 
      31 
      32 
      33 
      34 
      35 
      36 
      37 
      38 
      39 
      40 
      41 
      42 
      43 
      44 
      45 
      46 
      47 
      48 
      49 
      50 
      51 
      52 
      53 
      54 
      55 
      56 
      57 
      58 
      59 
      60 
      61 
      62 
      63 
      64 
      65 
      66 
      67 
      68 
      69 
      70 
      71 
      72 
      73 
      74 
      75 
      76 
      77 
      78 
      79 
      80 
      81 
      82 
      83 
      84 
      85 
      86 
      87  | 
    
      <?phpclass person{    public 
$name;    public 
$birthday;    public 
function __set($name,$value){        if(isset($this->$name))        $this->$name=$value;    }    public 
function __get($name){        if(isset($this->$name))        return 
$this->$name;    }}//观察者类实现SplSubject接口,SplSubject是php内置接口class PersonSubject implements  
SplSubject{    public 
$observers,$person;    public 
function __construct(person $person){        $this->observers = new 
SplObjectStorage();        $this->person=$person;    }    //增加一个观察者    public 
function attach(SplObserver $observers){        $this->observers->attach($observers);    }    //删除一个观察者    public 
function detach(SplObserver $observers){        $this->observers->detach($observers);    }    //达到条件时,通知观察者    public 
function notify(){        foreach($this->observers as 
$observer){            $observer->update($this);        }    }    //返回被观察者实例,供观察者处理    public 
function getPerson(){        return 
$this->person;    }}//观察者实现SplObserver接口,SplObserver是php内置接口class fatherObserver implements 
SplObserver{    //条件达到时,执行的动作    public 
function update(SplSubject $splsubject){        $person=$splsubject->getPerson();        echo 
$person->name.‘ 生日快乐,我是爸爸!‘;    }}class motherObserver implements 
SplObserver{    public 
function update(SplSubject $splsubject){        $person=$splsubject->getPerson();        echo 
$person->name.‘ 生日快乐,我是妈妈!‘;    }}class sisterObserver implements 
SplObserver{    public 
function update(SplSubject $splsubject){        $person=$splsubject->getPerson();        echo 
$person->name.‘ 生日快乐,我是姐姐!‘;    }}//实例化小明$xiaoming=new 
person();$xiaoming->name=‘小明‘;$xiaoming->birthday=‘0512‘;//绑定观察者$subject=new 
PersonSubject($xiaoming);$subject->attach(new 
fatherObserver);$subject->attach(new 
motherObserver);$subject->attach(new 
sisterObserver);//如果小明生日到了,通知观察者$date=date(‘md‘,time());if($xiaoming->birthday==$date){    $subject->notify();}?> | 
输出    
大家自己看吧,项目中我也没用到观察者模式,郁闷!
原文:http://www.cnblogs.com/xiaotongs/p/3724525.html