星空网 > 软件开发 > ASP.net

php设计模式

在php5.0.1版本中提供了SplSubject和SplObserver两个接口帮助开发这实现观察者模式。

被观察者:

SplSubject {/* 方法 */abstract public void attach ( SplObserver $observer )abstract public void detach ( SplObserver $observer )abstract public void notify ( void )}

观察者:

SplObserver {/* 方法 */abstract public void update ( SplSubject $subject )}

观察者模式的简单理解:

在官网API中提供了一个例子是这样的。现在有几种报纸,诸如美国日报、中国日报之类的,每类报纸都有固定的订阅者。现在有个需求是:每当报纸发布新的新闻的时候,其相对应的订阅者都可以收到该新闻的内容。

这样的例子在日常开发中很常见,诸如我们订阅了一些科技杂志或者桃色新闻,然后,在我们的注册邮箱中,边会是不是的收到一些邮件。于是我们可以这样简单的理解。

新闻杂志是被观察者,我们作为观察者,新闻杂志有个发布新闻的小窗口,每当这个窗口有迅猛的爆料时,我们立马虎视眈眈的发现了。于是,我们书写代码:

<?php/** * 定义被观察者:新闻杂志 */class Newspaper implements SplSubject{  private $name;  private $observers = array();  private $content;  public function __construct($name){    $this->name = $name;  }   public function attach (SplObserver $observer ){     $this->observers[] = $observer;   }   public function detach (SplObserver $observer ){     $key = array_search($observer, $observers);     if($key){       unset($this->observers[$key]);     }   }   public function notify( ){     foreach ($this->observers as $value) {       $value->update($this);     }   }   public function getContent(){     return $this->content;   }   public function breadOut($content){     $this->content = $content;     $this->notify();   }}/** * 定义观察者:订阅用户 */class Reader implements SplObserver{  private $name;  public function __construct($name){    $this->name = $name;  }  public function update(SplSubject $subject) {    echo $this->name.' is reading breakout news <b>'.$subject->getContent().'</b><br>';  }}/** * 实例化新闻杂志 * @var Newspaper */$USANews = new Newspaper('USA NEWS');$CHINANews = new Newspaper('CHINA NEWS');/** * 实例化读者 * @var Reader */$jack = new Reader('jack');$tom = new Reader('tom');/** * 订阅用户在这一刻订阅了该报纸 */$USANews->attach($jack);$USANews->attach($tom);$sange = new Reader('zhangsan');$siye = new Reader('lisi');$CHINANews->attach($sange);$CHINANews->attach($siye);/** * 新闻杂志小窗口打开,开始爆料 */$USANews->breadOut('USA break out');$CHINANews->breadOut('CHINA break out');


运行结果如下:

jack is reading breakout news USA break outtom is reading breakout news USA break outzhangsan is reading breakout news CHINA break outlisi is reading breakout news CHINA break out

每类报纸相对应的订阅者都收到了该类报纸的爆料。

 




原标题:php设计模式

关键词:PHP

PHP
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

携手Shopify:https://www.goluckyvip.com/tag/9749.html
中国发海运到菲律宾:https://www.goluckyvip.com/tag/97490.html
中国到菲律宾的海运:https://www.goluckyvip.com/tag/97491.html
深圳海运到菲律宾要几天:https://www.goluckyvip.com/tag/97492.html
海运从中国到菲律宾:https://www.goluckyvip.com/tag/97493.html
深圳发菲律宾海运:https://www.goluckyvip.com/tag/97494.html
TikTok 将推出先买后付服务 :https://www.kjdsnews.com/a/1836651.html
TikTok 将推出先买后付服务 :https://www.goluckyvip.com/news/188219.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流