设计模式之观察者模式
它是一种事件系统,意味着这一模式允许某个类观察另一个类的状态,当被观察的类状态发生改变的时候,观察类可以收到通知并且做出相应的动作;观察者模式提供了避免组件之间的紧密耦合的另一种方法。
header('content-type:text/html;charset=utf-8'); # 被观察对象 interface IWeather { public function addObserve(IObs $sub);//添加观察 public function delObserve(IObs $sub);//删除观察 public function thunder(); //打雷事件 } //娶亲场景 class QuQin implements IWeather { private $_arrObserve = []; public function addObserve( IObs $sub ) { $this->_arrObserve[] = $sub; } public function delObserve( IObs $sub ) { if(isset($this->_arrObserve[$sub])){ unset($this->_arrObserve[$sub]); } } public function thunder() { echo '轰隆隆...劈叉...'; if( !empty($this->_arrObserve) ){ foreach( $this->_arrObserve as $obj){ $obj->warning(); } } } } # 观察者要实现的 interface IObs { public function warning(); } class TangSanZang implements IObs { public function warning() { echo '打雷啦!下雨啦! 赶紧回家收衣服啊'; } } # 创建一个被观察者 $day = new QuQin(); # 添加一个观察者 $day->addObserve(new TangSanZang()); # 观察者触发一个行为 $day->thunder();