亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

OOD、DIP、IOC、DI、依賴注入容器(即 控制反轉(zhuǎn)容器,IOC Container)

renweihub / 2000人閱讀

摘要:服務(wù)本省作為一個(gè)高層類,對(duì)外提供訪問(wèn),卻受制于提供具體服務(wù)的服務(wù)提供者定義的實(shí)現(xiàn),高層模塊依賴底層模塊實(shí)現(xiàn),違背了依賴倒置原則。遵循依賴倒置原則的例子場(chǎng)景同介紹中場(chǎng)景。

1. 名詞介紹

OOD,面向?qū)ο笤O(shè)計(jì)

DIP,依賴倒置(軟件設(shè)計(jì)原則)

IOC,控制反轉(zhuǎn)(軟件設(shè)計(jì)模式)

DI,依賴注入

IOC Container,控制反轉(zhuǎn)容器,也是依賴注入容器

2. 組成部分

服務(wù)清單(功能清單,service list)

服務(wù)(高層類,service ,對(duì)外提供服務(wù))

服務(wù)提供者(底層類,service provider ,實(shí)際提供服務(wù)的對(duì)象)

2. 依賴倒置原則(DIP) 2.0 介紹

依賴倒置原則,它轉(zhuǎn)換了依賴,高層模塊不依賴于低層模塊的實(shí)現(xiàn),而低層模塊依賴于高層模塊定義的接口

詳細(xì)介紹請(qǐng)點(diǎn)我

2.1 場(chǎng)景描述

提供一個(gè)計(jì)算機(jī)儲(chǔ)存的服務(wù)。需要根據(jù)不同的用戶需求,使用不同的存儲(chǔ)設(shè)備。

2.2 沒(méi)有遵循依賴倒置原則的例子 2.2.1 定義好服務(wù)提供者(實(shí)際提供服務(wù))
// 定義一個(gè) 硬盤存儲(chǔ)類 (服務(wù)提供者)
class HardDiskStorage {
    public function saveToHardDisk(){
        
    }
    
    public function readFromHardDisk(){
        
    }
}

// 定義一個(gè) U盤存儲(chǔ)類(服務(wù)提供者)
class UStorage {
    public function saveToU(){
        
    }
    
    public function readFromU(){
        
    }
}
2.2.2 定義 服務(wù)(對(duì)外提供服務(wù)的對(duì)象)
/**
 * 定義一個(gè) ComputerStorage 類(存儲(chǔ)服務(wù))
 */ 

// 第一種:使用硬盤作為提供實(shí)際服務(wù)的對(duì)象
class ComputerStorage {
    protected $_storage = null;
    
    function __construct(){
        $this->_storage = new HardDiskStorage();
    }
    
    public function save(){
        $this->_storage->saveToHardDisk();
    }
    
    public function read(){
        $this->_storage->readFromHardDisk();
    }
}

// 第二種:使用 U 盤作為提供實(shí)際服務(wù)的對(duì)象
class ComputerStorage {
    protected $_storage = null;
    
    function __construct(){
        $this->_storage = new UStorage();
    }
    
    public function save(){
        $this->_storage->saveToU();
    }
    
    public function read(){
        $this->_storage->readFromU();
    }
}

// 讀取
$cs = new ComputerStorage();
$cs->read();
2.2.3 代碼分析

根據(jù)上面的代碼,當(dāng)切換服務(wù)提供者時(shí),服務(wù)類的代碼需要做較多的改動(dòng)。服務(wù)(ComputerStorage)本省作為一個(gè)高層類,對(duì)外提供訪問(wèn),卻受制于提供具體服務(wù)的服務(wù)提供者(HardDiskStorage、UStorage)定義的實(shí)現(xiàn)(saveToHardDisk、saveToUreadFromHardDisk、readFromU),高層模塊依賴底層模塊實(shí)現(xiàn),違背了依賴倒置原則。

2.3 遵循依賴倒置原則的例子 2.3.1 場(chǎng)景

2.1 介紹中場(chǎng)景。

2.3.2 定義服務(wù)清單(高層模塊定義接口)
interface ServiceList {
    public function save();
    public function read();
}
2.3.3 定義服務(wù)提供者
// 硬盤
class HardDiskStorage implements ServiceList {
    public function save(){
        
    }
    
    public function read(){
        
    }
}

// U 盤
class UStorage implements ServiceList {
    public function save(){
        
    }
    
    public function read(){
        
    }
}
2.3.4 定義服務(wù)
class ComputerStorage {
    protected $_storage = null;
    
    function __construct(){
        $this->_storage = new HardDiskStorage();        
    }
    
    public function save(){
        $this->_storage->save();
    }
    
    public function read(){
        $this->_storage->read();
    }
}

$cs = new ComputerStorage();
$cs->read();
2.3.5 代碼分析

上述代碼中,事先定義了好了服務(wù)清單(接口,ServiceList),然后服務(wù)提供者實(shí)現(xiàn)這些接口(HardDiskStorage、UStorage),服務(wù)(ComputerStorage)只需要切換服務(wù)提供者即可(HardDiskStorage、UStorage),完全無(wú)需理會(huì)他們的實(shí)現(xiàn)(readFromHardDisk、readFromU...等)。高層模塊不依賴于底層模塊定義的實(shí)現(xiàn),遵循了依賴倒置原則

3. 控制反轉(zhuǎn)(IOC) + 依賴注入(DI) 3.0 介紹

控制反轉(zhuǎn)(IoC),它為相互依賴的組件提供抽象,將依賴(低層模塊)對(duì)象的獲得交給第三方(系統(tǒng))來(lái)控制,即依賴對(duì)象不在被依賴模塊的類中直接通過(guò)new來(lái)獲取

詳細(xì)介紹請(qǐng)點(diǎn)我

3.1 場(chǎng)景

2 場(chǎng)景

3.2 沒(méi)有實(shí)現(xiàn)控制反轉(zhuǎn)的例子

2 中的例子就是沒(méi)有實(shí)現(xiàn)控制反轉(zhuǎn)的例子。2ComputerStorage 獲取依賴(HardDiskStorageUStorage)的途徑都是在 contruct 構(gòu)造函數(shù)中獲取的,即 類內(nèi)部實(shí)例化依賴獲取。

3.3 實(shí)現(xiàn)控制反轉(zhuǎn)的例子

以下代碼是根據(jù) 2 中的代碼做了些許的調(diào)整。

class ComputerStorage {
    protected $_storage = null;
    
    /**
     * 內(nèi)部只獲取依賴的實(shí)例
     */
    public function setStorage($storage){
        $this->_storage = $storage;
    }

    public function save(){
        $this->_storage->save();
    }
    
    public function read(){
        $this->_storage->read();
    }
}

// 外部實(shí)例化依賴
$hardDiskStorage = new HardDiskStorage();

$cs = new ComputerStorage();
// 注入依賴
$cs->setStorage($hardDiskStorage);
4. 依賴注入容器(IOC 容器) 4.0 場(chǎng)景

2 場(chǎng)景。

4.1 使用 IOC容器
class Container {
    // 注冊(cè)表
    protected static $_registry = null;
    
    // 保存到注冊(cè)表
    public static function set($classname , Callable $create){
        self::$_registry[$classname] = $create;
    }
    
    // 獲取注冊(cè)表對(duì)應(yīng)類的實(shí)例
    public static function get($key){
        call_user_func(self::$_registry[$key]);
    }
}

class ComputerStorage {
    protected $_storage = null;
    
    function __construct(){
        $this->_storage = Container::get("HardDiskStorage");
    }
    
    public function read(){
        $this->_storage->read();
    }
    
    public function save(){
        $this->_storage->save();
    }
}

/**
 * 注冊(cè)依賴
 */
Container::set("HardDiskStorage" , function(){
    return new HardDiskStorage();
});

Container::set("UStorage" , function(){
    return new UStorage();
});

// 測(cè)試
$cs = new ComputerStorage();

$cs->read();

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/25788.html

相關(guān)文章

  • Yii2中的依賴注入

    摘要:構(gòu)造器注入實(shí)現(xiàn)特定參數(shù)的構(gòu)造函數(shù),在新建對(duì)象時(shí)傳入所依賴類型的對(duì)象。 基本概念 1.依賴倒置(反轉(zhuǎn))原則(DIP):一種軟件架構(gòu)設(shè)計(jì)的原則(抽象概念,是一種思想)在面向?qū)ο缶幊填I(lǐng)域中,依賴反轉(zhuǎn)原則(Dependency inversion principle,DIP)是指一種特定的解耦(傳統(tǒng)的依賴關(guān)系創(chuàng)建在高層次上,而具體的策略設(shè)置則應(yīng)用在低層次的模塊上)形式,使得高層次的模塊不依賴于...

    harriszh 評(píng)論0 收藏0
  • 搞懂依賴注入, 用 PHP 手寫簡(jiǎn)易 IOC 容器

    摘要:依賴注入控制反轉(zhuǎn)的一種具體實(shí)現(xiàn)方法。接下來(lái),我們使用依賴注入實(shí)現(xiàn)控制反轉(zhuǎn),使依賴關(guān)系倒置依賴被動(dòng)傳入。從單元測(cè)試的角度看,依賴注入更方便和操作,方便了測(cè)試人員寫出質(zhì)量更高的測(cè)試代碼。 前言 好的設(shè)計(jì)會(huì)提高程序的可復(fù)用性和可維護(hù)性,也間接的提高了開(kāi)發(fā)人員的生產(chǎn)力。今天,我們就來(lái)說(shuō)一下在很多框架中都使用的依賴注入。 一些概念 要搞清楚什么是依賴注入如何依賴注入,首先我們要明確一些概念。 D...

    antz 評(píng)論0 收藏0
  • Yii源碼解讀-依賴注入容器

    摘要:在中使用解耦,有兩種注入方式構(gòu)造函數(shù)注入屬性注入。對(duì)象的實(shí)例化解析依賴信息該方法實(shí)質(zhì)上就是通過(guò)的反射機(jī)制,通過(guò)類的構(gòu)造函數(shù)的參數(shù)分析他所依賴的單元。 有關(guān)概念 依賴倒置原則(Dependence Inversion Principle, DIP) 傳統(tǒng)軟件設(shè)計(jì)中,上層代碼依賴于下層代碼,當(dāng)下層出現(xiàn)變動(dòng)時(shí),上層也要相應(yīng)變化。 DIP的核心思想是:上層定義接口,下層實(shí)現(xiàn)這個(gè)接口,從而使的下...

    Prasanta 評(píng)論0 收藏0
  • Laravel中的核心概念

    摘要:可以為服務(wù)提供者的方法設(shè)置類型提示。方法將在所有其他服務(wù)提供者均已注冊(cè)之后調(diào)用。所有服務(wù)提供者都在配置文件中注冊(cè)??梢赃x擇推遲服務(wù)提供者的注冊(cè),直到真正需要注冊(cè)綁定時(shí),這樣可以提供應(yīng)用程序的性能。 本文最早發(fā)布于 Rootrl的Blog 導(dǎo)言 Laravel是一款先進(jìn)的現(xiàn)代化框架,里面有一些概念非常重要。在上手Laravel之前,我認(rèn)為先弄懂這些概念是很有必要的。你甚至需要重溫下PHP...

    ddongjian0000 評(píng)論0 收藏0
  • 聊一聊PHP的依賴注入(DI) 和 控制反轉(zhuǎn)(IoC)

    摘要:前言最近在使用框架,看了下他的源碼,發(fā)現(xiàn)有很多地方也用到了依賴注入控制反轉(zhuǎn),覺(jué)得有必要和大家簡(jiǎn)單聊一聊什么是依賴注入以及怎么使用它。概念依賴注入和控制反轉(zhuǎn)是對(duì)同一件事情的不同描述,從某個(gè)方面講,就是它們描述的角度不同。 前言 最近在使用ThinkPHP5框架,看了下他的源碼,發(fā)現(xiàn)有很多地方也用到了依賴注入(控制反轉(zhuǎn)),覺(jué)得有必要和大家簡(jiǎn)單聊一聊什么是依賴注入以及怎么使用它。 簡(jiǎn)介 I...

    sixgo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

renweihub

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<