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