摘要:圖示代碼示例服務(wù)實(shí)例索引服務(wù)定義索引是否全局服務(wù)共享單例模式實(shí)例化省略服務(wù)實(shí)例化實(shí)現(xiàn)無(wú)法定位服務(wù)服務(wù)添加失敗感謝文中圖片來(lái)源來(lái)源網(wǎng)絡(luò)
什么是服務(wù)定位器
服務(wù)定位器(service locator)他知道如何定位(創(chuàng)建或者獲?。┮粋€(gè)應(yīng)用所需要的服務(wù),服務(wù)使用者在實(shí)際使用中無(wú)需關(guān)心服務(wù)的實(shí)際實(shí)現(xiàn)。
有什么作用
實(shí)現(xiàn)服務(wù)使用者和服務(wù)的解耦,無(wú)需改變代碼而只是通過(guò)簡(jiǎn)單配置更服服務(wù)實(shí)現(xiàn)。
UML圖示
代碼示例
class ServiceLocator { /** * 服務(wù)實(shí)例索引 */ privite $_services = []; /** * 服務(wù)定義索引 */ private $_definitions = []; /** * 是否全局服務(wù)共享(單例模式) */ 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])) { // 實(shí)例化 $definition = $this->_definitions[$id]; $object = Creator::createObject($definition);//省略服務(wù)實(shí)例化實(shí)現(xiàn) if($this->_shared[$id]){ $this->_services[$id] = $object } return $object; } throw new Exception("無(wú)法定位服務(wù){(diào)$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("服務(wù)添加失敗"); } }
感謝
文中圖片來(lái)源來(lái)源網(wǎng)絡(luò) http://designpatternsphp.read...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/23128.html
摘要:通過(guò),腳本層無(wú)需過(guò)多考慮執(zhí)行的具體環(huán)境,而本身則可以讓針對(duì)自己的特點(diǎn)給出特有實(shí)現(xiàn)。模式下,也只執(zhí)行一次。這幾個(gè)概念的關(guān)系如下網(wǎng)關(guān)協(xié)議,與語(yǔ)言無(wú)關(guān),所以與關(guān)系也不大??偨Y(jié)本文簡(jiǎn)要回顧了程序的架構(gòu)和執(zhí)行流程,并對(duì)幾個(gè)容易混淆概念做了介紹。 轉(zhuǎn)載請(qǐng)注明文章出處:https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請(qǐng)求 cookie we...
摘要:如果你想體驗(yàn)原味編程,用開頭的比較適合否則建議使用流函數(shù)。有關(guān)流的知識(shí),請(qǐng)參考本人之前的博文回顧之流。接下來(lái)我們用流函數(shù)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的客戶端和服務(wù)端。流函數(shù)中的和兩個(gè)函數(shù)是我們想要的。本文目的是簡(jiǎn)要介紹中的編程,行文到此已經(jīng)達(dá)到目的。 轉(zhuǎn)載請(qǐng)注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請(qǐng)求 cookie w...
摘要:簡(jiǎn)單字符串緩存實(shí)戰(zhàn)完整實(shí)戰(zhàn)種設(shè)計(jì)模式設(shè)計(jì)模式是面向?qū)ο蟮淖罴褜?shí)踐成為專業(yè)程序員路上用到的各種優(yōu)秀資料神器及框架成為一名專業(yè)程序員的道路上,需要堅(jiān)持練習(xí)學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 微型新聞系統(tǒng)的開發(fā)(PHP 5.4 + MySQL 5.5) 微型新聞系統(tǒng)的開發(fā)(PHP 5.4 + MySQL 5.5) 九個(gè)很有用的 PHP 代碼 php 代碼 國(guó)內(nèi)值得關(guān)注的...
摘要:不是原創(chuàng)的,主要是看了覺(jué)得有些幫助,就分享給大家看看。對(duì)于的知識(shí)要求我覺(jué)得以鳥哥的私房菜這本書作為要求吧。前端大部分使用,對(duì)靜態(tài)資源使用可以加載更快。其實(shí)編程使用什么語(yǔ)言不重要,最重要的是思想,編程的思路。 不是原創(chuàng)的,主要是看了覺(jué)得有些幫助,就分享給大家看看。 PHP的運(yùn)行環(huán)境 連環(huán)境都搞不起來(lái),就是你有多么喜歡PHP,那也是白搭,開始我們大多會(huì)使用集成環(huán)境軟件例如xampp,wam...
摘要:創(chuàng)建型設(shè)計(jì)模式通過(guò)控制這個(gè)對(duì)象的創(chuàng)建方式來(lái)解決此問(wèn)題。通過(guò)這樣做,這些模式增加了執(zhí)行此通信的靈活性。已于年月日翻譯完畢,參與用戶人,詳細(xì)列表請(qǐng)見(jiàn)參與譯者。 showImg(https://segmentfault.com/img/bV6R8Q?w=1024&h=683); 翻譯進(jìn)度請(qǐng)見(jiàn):https://laravel-china.org/doc... 設(shè)計(jì)模式不僅代表著更快開發(fā)健壯軟件...
閱讀 653·2021-11-25 09:43
閱讀 1926·2021-11-17 09:33
閱讀 839·2021-09-07 09:58
閱讀 2071·2021-08-16 10:52
閱讀 492·2019-08-30 15:52
閱讀 1734·2019-08-30 15:43
閱讀 1004·2019-08-30 15:43
閱讀 2938·2019-08-29 16:41