观察者模式

//观察者模式

/**
 *
 * 大概意思就是,当一个事件的状态发生改变以后,通知其余依赖的事务。
 *
 * 通常的作法是代码下面直接撸代码, 这样的很差的地方就是,没增长一个依赖都须要对下面增长,接着更改。
 * 逻辑多了,就会很长很长。固然大部分会每一个依赖业务封装到一个方法中。若是模块太大可能就拆分作队列了。
 * 其余依赖直接消费队列就能够了。
 * 如今有一种模式能够解决这种方法。
 * 大概就是下面代码的样子。
 * 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();
相关文章
相关标签/搜索