<?phpInterface Obseverr{ public function update(Obseverable $subject);}abstract class Obsever implements Obseverr{ protected $date; public function update(Obseverable $date){ $this->date = $date; }}abstract class Obseverable{ private $Obsevers = array(); public function addObsever(Obsever $obj){ array_push($this->Obsevers,$obj); } public function notifyObsevers(){ foreach( $this->Obsevers as $v){ $v->update($this); } }}class test1 extends Obsever{ public function fire(){ foreach($this->date->getRecord() as $k => $v){ $ret .= $v; } echo '類別1輸出'.$ret.'<br>'; }}class test2 extends Obsever{ public function fire(){ foreach($this->date->getRecord() as $k => $v){ $ret .= $v; } echo '類別2輸出'.$ret.'<br>'; }}class dateResource extends Obseverable{ private $record = array(); public function addRecord($recArr){
array_push($this->record,$recArr);
$this->notifyObsevers(); } public function getRecord(){ return $this->record; }}$DateIns = new dateResource();$DateIns->addObsever($test1Ins = new test1());$DateIns->addObsever($test2Ins = new test2());$DateIns->addRecord('xiaojiang1');$test1Ins->fire();$DateIns->addRecord('xiaojiang2');$test1Ins->fire();$test2Ins->fire();?>
用法和用例 http://blog.csdn.net/alpeace/article/details/7588042