转 php 观察者模式
生活随笔
收集整理的这篇文章主要介绍了
转 php 观察者模式
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
<?php
/**
* 观察者模式
*//**
* 抽象主题角色
*/
interface Subject {/**
* 增加一个新的观察者对象
* @param Observer $observer
*/
public function attach(Observer $observer);/**
* 删除一个已注册过的观察者对象
* @param Observer $observer
*/
public function detach(Observer $observer);/**
* 通知所有注册过的观察者对象
*/
public function notifyObservers();
}/**
* 具体主题角色
*/
class ConcreteSubject implements Subject {private $_observers;public function __construct() {
$this->_observers = array();
}/**
* 增加一个新的观察者对象
* @param Observer $observer
*/
public function attach(Observer $observer) {
return array_push($this->_observers, $observer);
}/**
* 删除一个已注册过的观察者对象
* @param Observer $observer
*/
public function detach(Observer $observer) {
$index = array_search($observer, $this->_observers);
if ($index === FALSE || ! array_key_exists($index, $this->_observers)) {
return FALSE;
}unset($this->_observers[$index]);
return TRUE;
}/**
* 通知所有注册过的观察者对象
*/
public function notifyObservers() {
if (!is_array($this->_observers)) {
return FALSE;
}foreach ($this->_observers as $observer) {
$observer->update();
}
return TRUE;
}
}/**
* 抽象观察者角色
*/
interface Observer {/**
* 更新方法
*/
public function update();
}class ConcreteObserver implements Observer {/**
* 观察者的名称
* @var <type>
*/
private $_name;public function __construct($name) {
$this->_name = $name;
}/**
* 更新方法
*/
public function update() {
echo "Observer ". $this->_name. " has notified.\n";
}}$subject = new ConcreteSubject();/* 添加第一个观察者 */
$observer1 = new ConcreteObserver('Martin');
$subject->attach($observer1);echo "\n The First notify:\n";
$subject->notifyObservers();/* 添加第二个观察者 */
$observer2 = new ConcreteObserver('phppan');
$subject->attach($observer2);echo "\n The Second notify:\n";
$subject->notifyObservers();/* 删除第一个观察者 */
$subject->detach($observer1);echo "\n The Third notify:\n";
$subject->notifyObservers();
?>
转至:http://wend1054.blog.163.com/
转载于:https://www.cnblogs.com/feiyuhit/archive/2013/06/14/3135729.html
总结
以上是生活随笔为你收集整理的转 php 观察者模式的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: CYQ.DBImport 数据库反向工程
- 下一篇: php管理后台,后台管理主页面 admi