观察者模式目前我能理解的就是降低程序的耦合,方便后期的代码维护,比如某个流程的业务逻辑比较复杂,处理的东西比较多的话,代码堆积在一起对于后期的维护非常困难,如果能把一些逻辑独立出来那就比较方便了,需要改哪一个就改哪一个,不用担心会影响其他业务
一个简单的例子:
// 主题接口
interface Subject{
public function register(Observer $observer);
}
// 观察者接口
interface Observer{
public function call_back($obj);
}
// 主题类--商品购买
class Action implements Subject{
public $_observers=array();
public $user='';
public function register(Observer $observer){
$this->_observers[]=$observer;
}
public function buy(){
//购买逻辑处理
$this->user='测试';
//循环调用需要通知的处理类、比如购买成功短信通知用户
foreach ($this->_observers as $observer) {
$observer->call_back($this);
}
}
}
//发送短信
class Msg implements Observer{
public function call_back($obj){
echo $obj->user.'你好,xxx商品已购买成功<hr/>';
}
}
//赠送积分
class GiveIntegral implements Observer{
public function call_back($obj){
echo $obj->user.'你好,系统赠送xxx积分<pre>';
}
}
// 应用实例
$action=new Action();
$action->register(new Msg());
$action->register(new GiveIntegral());
$action->buy();