<?php
// 被观察者接口
interface subject{
public function register(observer $observer); //添加(注册)观察者对象
public function detach(observer $observer); //删除观察者对象
public function notify(); //通知观察者执行相应功能
}
// 观察者接口
interface observer{
public function watch(); //观察者要执行的方法
}
<?php
// 被观察者继承类
class action implements subject{
public $_observers=array(); //用于存储观察者对象
//用于添加(注册)观察者对象
public function register(observer $observer){
$this->_observers[]=$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 notify(){
//****重点,其实就是循环中执行各观察这对象的watch方法,不同功能方法内容不同但方法名相同
foreach ($this->_observers as $observer) {
$observer->watch();
}
}
}
// cat观察者继承类
class cat implements observer{
public function watch(){
echo "cat watches tv<hr/>";
}
}
//dog观察者继承类
class dog implements observer{
public function watch(){
echo "dog watches tv<hr/>";
}
}
//people观察者继承类
class people implements observer{
public function watch(){
echo "people watches tv<hr/>";
}
}