PHP 设计模式之观察者模式介绍

 更新时间:2012年02月22日 21:24:02   作者:  
观察者模式定义对象的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新!
介绍
观察者模式定义对象的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新!
设计原则
在观察者模式中,会改变的是主题的状态以及观察者的数目。用这个模式,你可以改变依赖于主题状态的对象,却不必改变主题。——找出程序中会变化的方面,然后将其和固定不变的方面相分离!
主题和观察者都使用接口:观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。这样可以让两者之间运作正常,又同时具有松耦合的优点! ——针对接口编程,不针对实现编程!

观察者模式利用“组合”将许多观察者组合进主题中。对象(观察者——主题)之间的这种关系不是通过继承产生的,而是在运行时利用组合的方式产生的。 ——多用组合,少用继承!
代码
复制代码 代码如下:

<?php
/**
* 观察者模式
* @author: Mac
* @date: 2012/02/22
*/
class Paper{ /* 主题 */
private $_observers = array();
public function register($sub){ /* 注册观察者 */
$this->_observers[] = $sub;
}
public function trigger(){ /* 外部统一访问 */
if(!empty($this->_observers)){
foreach($this->_observers as $observer){
$observer->update();
}
}
}
}
/**
* 观察者要实现的接口
*/
interface Observerable{
public function update();
}
class Subscriber implements Observerable{
public function update(){
echo "Callback\n";
}
}
//下面是测试代码
?
/* 测试 */
$paper = new Paper();
$paper->register(new Subscriber());
//$paper->register(new Subscriber1());
//$paper->register(new Subscriber2());
$paper->trigger();


总结

当新对象要填入的时候,只需要在主题(又叫可观察者)中进行注册(注册方式很多,你也可以在构造的时候,或者框架访问的接口中进行注册),然后实现代码直接在新对象的接口中进行。这降低了主题对象和观察者对象的耦合度。

好的设计模式不会直接进入你的代码中,而是进入你的大脑中。

相关文章

  • PHP使用Pear发送邮件(Windows环境)

    PHP使用Pear发送邮件(Windows环境)

    这篇文章主要介绍了在Windows环境下,PHP使用Pear发送邮件的实现方法,以及Windows下安装PHP Pear的详细步骤,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • php实现分页功能的详细实例方法

    php实现分页功能的详细实例方法

    在本篇文章里小编给大家整理的是关于php实现分页功能的详细实例方法,有需要的朋友们可以学习下。
    2019-09-09
  • linux下php上传文件注意事项

    linux下php上传文件注意事项

    这篇文章主要为大家详细介绍了linux下php上传文件注意事项,希望对大家安装php有所帮助,感兴趣的朋友可以参考一下
    2016-06-06
  • php实用代码片段整理

    php实用代码片段整理

    这篇文章主要介绍了php实用代码片段,整理归纳了php常见的编程技巧代码段,包括网页、字符串、图片、日期、数组及json等操作技巧,需要的朋友可以参考下
    2016-11-11
  • php中current、next与reset函数用法实例

    php中current、next与reset函数用法实例

    这篇文章主要介绍了php中current、next与reset函数用法,以实例形式详细讲述了PHP中针对数组操作的函数current、next与reset的具体用法,对于深入了解数组的用法具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • php实现可逆加密的方法

    php实现可逆加密的方法

    这篇文章主要介绍了php实现可逆加密的方法,借鉴了discuz的加密原理实现通过密钥进行可逆加密的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • php单一接口的实现方法

    php单一接口的实现方法

    这篇文章主要介绍了php单一接口的实现方法,涉及php接口的基本定义与使用技巧,需要的朋友可以参考下
    2015-06-06
  • php计算整个目录大小的方法

    php计算整个目录大小的方法

    这篇文章主要介绍了php计算整个目录大小的方法,涉及php针对目录操作的相关技巧,需要的朋友可以参考下
    2015-06-06
  • 用PHP实现Ftp用户的在线管理

    用PHP实现Ftp用户的在线管理

    最近接手一案子,要求必须实现在线报名和上传作品。通过FreeBSD+Apache+PHP+Mysql+FTP我实现了该要求
    2012-02-02
  • php实现登录页面的简单实例

    php实现登录页面的简单实例

    在本篇文章里小编给大家分享的是关于php实现登录页面的简单实例以及相关知识点,有需要的朋友们学习下。
    2019-09-09

最新评论