摘要:圖示代碼示例服務實例索引服務定義索引是否全局服務共享單例模式實例化省略服務實例化實現無法定位服務服務添加失敗感謝文中圖片來源來源網絡
什么是服務定位器
服務定位器(service locator)他知道如何定位(創建或者獲取)一個應用所需要的服務,服務使用者在實際使用中無需關心服務的實際實現。
有什么作用
實現服務使用者和服務的解耦,無需改變代碼而只是通過簡單配置更服服務實現。
UML圖示
代碼示例
class ServiceLocator { /** * 服務實例索引 */ privite $_services = []; /** * 服務定義索引 */ private $_definitions = []; /** * 是否全局服務共享(單例模式) */ private $_shared = []; public function has($id){ return isset($this->_services[$id]) || isset($this->_definitions[$id]); } public function __get($id){ if($this->has($this->id)){ $this->get($id); } // another implement } public function get($id){ if(isset($this->_services[$id]) && $this->_shared[$id]){ return $this->_services[$id]; } if (isset($this->_definitions[$id])) { // 實例化 $definition = $this->_definitions[$id]; $object = Creator::createObject($definition);//省略服務實例化實現 if($this->_shared[$id]){ $this->_services[$id] = $object } return $object; } throw new Exception("無法定位服務{$id}") } public function set($id,$definition,$share = false){ if ($definition === null) { unset($this->_services[$id], $this->_definitions[$id]); return; } unset($this->_services[$id]); $this->_shared[$id] = $share; if (is_string($definition)) { return $this->_definitions[$id] = $definition; } if (is_object($definition) || is_callable($definition, true)) { return $this->_definitions[$id] = $definition; } if (is_array($definition)) { if (isset($definition["class"])) { return $this->_definitions[$id] = $definition; } } throw new Exception("服務添加失敗"); } }
感謝
文中圖片來源來源網絡 http://designpatternsphp.read...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/23128.html
摘要:通過,腳本層無需過多考慮執行的具體環境,而本身則可以讓針對自己的特點給出特有實現。模式下,也只執行一次。這幾個概念的關系如下網關協議,與語言無關,所以與關系也不大??偨Y本文簡要回顧了程序的架構和執行流程,并對幾個容易混淆概念做了介紹。 轉載請注明文章出處:https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎 web請求 cookie we...
摘要:如果你想體驗原味編程,用開頭的比較適合否則建議使用流函數。有關流的知識,請參考本人之前的博文回顧之流。接下來我們用流函數實現一個簡單的客戶端和服務端。流函數中的和兩個函數是我們想要的。本文目的是簡要介紹中的編程,行文到此已經達到目的。 轉載請注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎 web請求 cookie w...
摘要:不是原創的,主要是看了覺得有些幫助,就分享給大家看看。對于的知識要求我覺得以鳥哥的私房菜這本書作為要求吧。前端大部分使用,對靜態資源使用可以加載更快。其實編程使用什么語言不重要,最重要的是思想,編程的思路。 不是原創的,主要是看了覺得有些幫助,就分享給大家看看。 PHP的運行環境 連環境都搞不起來,就是你有多么喜歡PHP,那也是白搭,開始我們大多會使用集成環境軟件例如xampp,wam...
摘要:創建型設計模式通過控制這個對象的創建方式來解決此問題。通過這樣做,這些模式增加了執行此通信的靈活性。已于年月日翻譯完畢,參與用戶人,詳細列表請見參與譯者。 showImg(https://segmentfault.com/img/bV6R8Q?w=1024&h=683); 翻譯進度請見:https://laravel-china.org/doc... 設計模式不僅代表著更快開發健壯軟件...
閱讀 649·2021-11-25 09:43
閱讀 1920·2021-11-17 09:33
閱讀 834·2021-09-07 09:58
閱讀 2068·2021-08-16 10:52
閱讀 490·2019-08-30 15:52
閱讀 1730·2019-08-30 15:43
閱讀 996·2019-08-30 15:43
閱讀 2934·2019-08-29 16:41