觀察者模式

//觀察者模式

/**
 *
 * 大概意思就是,當一個事件的狀態發生改變以後,通知其餘依賴的事務。
 *
 * 通常的作法是代碼下面直接擼代碼, 這樣的很差的地方就是,沒增長一個依賴都須要對下面增長,接着更改。
 * 邏輯多了,就會很長很長。固然大部分會每一個依賴業務封裝到一個方法中。若是模塊太大可能就拆分作隊列了。
 * 其餘依賴直接消費隊列就能夠了。
 * 如今有一種模式能夠解決這種方法。
 * 大概就是下面代碼的樣子。
 * 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();
相關文章
相關標籤/搜索