成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

【php實現(xiàn)設(shè)計模式】之服務(wù)定位器模式

CarterLi / 567人閱讀

摘要:圖示代碼示例服務(wù)實例索引服務(wù)定義索引是否全局服務(wù)共享單例模式實例化省略服務(wù)實例化實現(xiàn)無法定位服務(wù)服務(wù)添加失敗感謝文中圖片來源來源網(wǎng)絡(luò)

什么是服務(wù)定位器

服務(wù)定位器(service locator)他知道如何定位(創(chuàng)建或者獲?。┮粋€應(yīng)用所需要的服務(wù),服務(wù)使用者在實際使用中無需關(guān)心服務(wù)的實際實現(xiàn)。

有什么作用

實現(xiàn)服務(wù)使用者和服務(wù)的解耦,無需改變代碼而只是通過簡單配置更服服務(wù)實現(xiàn)。

UML圖示

代碼示例

class ServiceLocator {

    /**
     * 服務(wù)實例索引
     */
    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])) {
            // 實例化
            $definition = $this->_definitions[$id];
            $object = Creator::createObject($definition);//省略服務(wù)實例化實現(xiàn)
            if($this->_shared[$id]){
                $this->_services[$id] = $object
            }
            
            return $object;
        }
        
        throw new Exception("無法定位服務(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ù)添加失敗");
    }
}

感謝

文中圖片來源來源網(wǎng)絡(luò) http://designpatternsphp.read...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/23128.html

相關(guān)文章

  • PHP回顧執(zhí)行流程及相關(guān)概念

    摘要:通過,腳本層無需過多考慮執(zhí)行的具體環(huán)境,而本身則可以讓針對自己的特點給出特有實現(xiàn)。模式下,也只執(zhí)行一次。這幾個概念的關(guān)系如下網(wǎng)關(guān)協(xié)議,與語言無關(guān),所以與關(guān)系也不大??偨Y(jié)本文簡要回顧了程序的架構(gòu)和執(zhí)行流程,并對幾個容易混淆概念做了介紹。 轉(zhuǎn)載請注明文章出處:https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請求 cookie we...

    jsdt 評論0 收藏0
  • PHP回顧socket編程

    摘要:如果你想體驗原味編程,用開頭的比較適合否則建議使用流函數(shù)。有關(guān)流的知識,請參考本人之前的博文回顧之流。接下來我們用流函數(shù)實現(xiàn)一個簡單的客戶端和服務(wù)端。流函數(shù)中的和兩個函數(shù)是我們想要的。本文目的是簡要介紹中的編程,行文到此已經(jīng)達到目的。 轉(zhuǎn)載請注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請求 cookie w...

    tomorrowwu 評論0 收藏0
  • php資料集

    摘要:簡單字符串緩存實戰(zhàn)完整實戰(zhàn)種設(shè)計模式設(shè)計模式是面向?qū)ο蟮淖罴褜嵺`成為專業(yè)程序員路上用到的各種優(yōu)秀資料神器及框架成為一名專業(yè)程序員的道路上,需要堅持練習(xí)學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 微型新聞系統(tǒng)的開發(fā)(PHP 5.4 + MySQL 5.5) 微型新聞系統(tǒng)的開發(fā)(PHP 5.4 + MySQL 5.5) 九個很有用的 PHP 代碼 php 代碼 國內(nèi)值得關(guān)注的...

    RobinQu 評論0 收藏0
  • 合格PHP工程師的知識結(jié)構(gòu)

    摘要:不是原創(chuàng)的,主要是看了覺得有些幫助,就分享給大家看看。對于的知識要求我覺得以鳥哥的私房菜這本書作為要求吧。前端大部分使用,對靜態(tài)資源使用可以加載更快。其實編程使用什么語言不重要,最重要的是思想,編程的思路。 不是原創(chuàng)的,主要是看了覺得有些幫助,就分享給大家看看。 PHP的運行環(huán)境 連環(huán)境都搞不起來,就是你有多么喜歡PHP,那也是白搭,開始我們大多會使用集成環(huán)境軟件例如xampp,wam...

    KaltZK 評論0 收藏0
  • PHP 設(shè)計模式》翻譯完畢

    摘要:創(chuàng)建型設(shè)計模式通過控制這個對象的創(chuàng)建方式來解決此問題。通過這樣做,這些模式增加了執(zhí)行此通信的靈活性。已于年月日翻譯完畢,參與用戶人,詳細列表請見參與譯者。 showImg(https://segmentfault.com/img/bV6R8Q?w=1024&h=683); 翻譯進度請見:https://laravel-china.org/doc... 設(shè)計模式不僅代表著更快開發(fā)健壯軟件...

    verano 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<