//观察者模式
/**
*
* 大概意思就是,当一个事件的状态发生改变之后,通知其他依赖的事务。
*
* 一般的做法是代码下面直接撸代码, 这样的不好的地方就是,没增加一个依赖都需要对下面增加,接着更改。
* 逻辑多了,就会很长很长。当然大部分会每个依赖业务封装到一个方法中。如果模块太大可能就拆分做队列了。
* 其他依赖直接消费队列就可以了。
* 现在有一种模式可以解决这种方法。
* 大概就是下面代码的样子。
* Class upload
*/
class upload{
public $_obervers = [];
/**
* 增加订阅对象
* @param $object
*/
public function register($object){
$this->_obervers[] = $object;
}
/**
* 触发器
*/
public function trigger(){
if(empty($this->_obervers)){
return;
}
foreach($this->_obervers as $obj){
$obj->execute();
}
}
/**
* 具体操作事务
*/
public function htm5toxml(){
echo 'upload is end';
echo "\r\n";
$this->trigger();
}
}
class a{
public function execute(){
echo 'this is a execute';
echo "\r\n";
}
}
class b{
public function execute(){
echo 'this is b execute';
echo "\r\n";
}
}
$upload = new upload();
$upload->register(new a());
$upload->register(new b());
$upload->htm5toxml();