观察者模式
观察者模式(Observer),当一个对象状态发生改变时,依赖它的对象全部收到通知,并自动更新。
模式中的角色
- 抽象被观察者(抽象类,方便扩展)将观察者对象存放在一个容器里,该类提供一些接口,例如增加观察者,撤销观察者,通知观察者(notify)
- 具体被观察者(具体类,继承被观察者抽象类) 存入需要通知的观察者,当观察者需要update时,调用notify方法
- 抽象观察者(接口或抽象类)为具体的观察者提供更新的接口,当被观察者通知时进行update
- 具体观察者(具体类,继承或实现抽象观察者) 实现抽象观察者的接口,自动update
phpDemo
Magento是一套专业开源的PHP电子商务系统。Magento设计得非常灵活,具有模块化架构体系和丰富的功能。易于与第三方应用系统无缝集成。Magento开源网店系统的特点主要分以下几大类,网站管理促销和工具国际化支持SEO搜索引擎优化结账方式运输快递支付方式客户服务用户帐户目录管理目录浏览产品展示分析和报表Magento 1.6 主要包含以下新特性:•持久性购物 - 为不同的
立即学习“PHP免费学习笔记(深入)”;
抽象被观察者
<?phpabstractclassEventGenerator{private$observer_arr = array();
/*
添加观察者
*/publicfunctionaddObserver( Observer $observer)
{$this->observer_arr[] = $observer;
}
/*
通知所有观察者
*/publicfunctionnotify()
{foreach ($this->observer_arr as$observer)
{
$observer->update();
}
}
}
具体被观察者
classEventextendsEventGenerator{publicfunctiontrigger()
{echo'event happen!<br/>';
//当事件发生时,通知所有观察者$this->notify();
}
}
抽象观察者
<?phpinterfaceObserver{//自动更新functionupdate();
}
具体观察者
classObserver1implementsObserver{//实现update方法publicfunctionupdate()
{echo'observer1 update<br/>';
}
}
classObserver2implementsObserver{//实现update方法publicfunctionupdate()
{echo'observer2 update<br/>';
}
}
测试代码
$obj = new Event(); //添加观察者$obj->addObserver(new Observer1()); $obj->addObserver(new Observer2()); $obj->trigger();
模式总结
- 优点:观察者模式实现了低耦合,非侵入式的通知和自动更新机制
- 缺点:依赖关系并未完全解除,抽象通知者依旧依赖抽象的观察者
- 试用场景:1.当一个对象的改变需要给变其它对象时,而且它不知道具体有多少个对象有待改变时; 2.一个抽象某型有两个方面,当其中一个方面依赖于另一个方面,这时用观察者模式可以将这两者封装在独立的对象中使它们各自独立地改变和复用
以上就介绍了php设计模式之———观察者模式,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。










