原文链接:http://www.orlion.ga/719/
解释:
观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性。
代码:
首先是CD类:
namespace Observer; class CD{ public $title; public $band; protected $_observers = []; public function __construct($title , $band) { $this->title = $title; $this->band = $band; } public function attachObserver($type ,CDObserver $observer) { $this->_observers[$type][] = $observer; } public function notifyObserver($type) { if (isset($this->_observers[$type])) { foreach ($this->_observers[$type] as $observer) { $observer->update($this); } } } public function buy() { echo 'CD buy'; $this->notifyObserver('purchased'); } }
其中attachObserver()方法注入CD的观察者,而notifyObserver()方法则是通知CD的观察者们,之所以加了一个type是为了更好的对CD的观察者进行分类管理。(也可以理解为不同的事件对应不同的观察者)
然后就是它的观察者接口CDObserver:
namespace Observer; interface CDObserver{ function update(CD $cd); }
然后是观察者的实现SendEmailObserver:
namespace Observer; class SendEmailObserver implements CDObserver{ public function update(CD $cd) { echo $cd->title . "被卖出去了"; } }
在App.php中运行:
require 'CD.php'; require 'CDObserver.php'; require 'SendEmailObserver.php'; $cd = new Observer\CD('whats' , 'Simple Plan'); $sendEmailObserver = new Observer\SendEmailObserver(); $cd->attachObserver('purchased' , $sendEmailObserver); $cd->buy();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。