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

資訊專欄INFORMATION COLUMN

如何理解依賴注入(DI)

anyway / 2198人閱讀

摘要:什么是依賴注入依賴倒置原則高層模塊不應(yīng)該依賴于低層模塊,兩個(gè)都應(yīng)該依賴于抽象接口。而依賴倒置原則的思想是,上層不應(yīng)該依賴下層,應(yīng)依賴接口。當(dāng)然依賴倒置原則也始終貫徹在里面。

什么是依賴注入(Dependency Injection)

依賴倒置原則:高層模塊不應(yīng)該依賴于低層模塊,兩個(gè)都應(yīng)該依賴于抽象(接口)。

依賴倒置是一種軟件設(shè)計(jì)思想,在傳統(tǒng)軟件中,上層代碼依賴于下層代碼,當(dāng)下層代碼有所改動(dòng)時(shí),上層代碼也要相應(yīng)進(jìn)行改動(dòng),因此維護(hù)成本較高。而依賴倒置原則的思想是,上層不應(yīng)該依賴下層,應(yīng)依賴接口。意為上層代碼定義接口,下層代碼實(shí)現(xiàn)該接口,從而使得下層依賴于上層接口,降低耦合度,提高系統(tǒng)彈性。

舉個(gè)栗子:小霸王游戲機(jī)
// 如果使用單純的面向?qū)ο髞?lái)寫(xiě)
class XiaoBaWang
{    
    private $game;    
    public function loadGame()
    {        
    $this->game = new HunDouLuo();        
    $this->game->play();    
    }
}
class HunDouLuo{    
    public function play()    
    {        
    //玩游戲    
    }
}
$machine = new XiaoBaWang();
$machine->loadGame();

class XiaoBaWang
{    
    private $game;    
    public function loadGame()    
    {        
    $this->game = new Tank();       
     $this->game->play();    
}
}
class Tank 
{    
    public function play()    
    {        
        //玩游戲    
    }
}
$reg = new XiaoBaWang();
$reg->loadGame();
使用依賴注入的寫(xiě)法

小霸王游戲機(jī):插拔式卡帶

interface Game
{    
    public function play();
}
class HunDouLuo implements Game
{    
    public function play()    
{        
// 玩魂斗羅    
}
}
class Tank implements Game
{    
    public function play()    
{        
// 坦克大戰(zhàn)    
}
}
class XiaoBaWang
{    
    private $game;    
    public function __construct(Game $game)    
    {        
        $this->game = $game;    
    }    
    public function loadGame()    
    {        
        $this->game->play();    
    }
}
$hunDouLuo = new HunDouLuo();
$tank = new Tank();
$machine = new XiaoBaWang($hunDouLuo);
$machine->loadGame();
$machine = new XiaoBaWang($tank);
$machine->loadGame();
上例就使用了"注入"這個(gè)思想,就像注射器一樣將一個(gè)類的實(shí)例注入到另一個(gè)類的實(shí)例中去,需要用什么就注入什么。當(dāng)然"依賴倒置原則"也始終貫徹在里面。"注入"不僅可以通過(guò)構(gòu)造函數(shù)注入,也可以通過(guò)屬性注入,上面你可以可以通過(guò)一個(gè)"set"來(lái)動(dòng)態(tài)為"game"這個(gè)屬性賦值。
ioc容器
不過(guò)開(kāi)發(fā)中會(huì)有這樣的經(jīng)歷,一開(kāi)始類比較少,慢慢的功能越來(lái)越多,人員越來(lái)越多,編寫(xiě)了很多類,要使用這個(gè)類必須先引入那個(gè)類,而且一定要確保順序正確。
于是。。。。
就出現(xiàn)了這樣的情況, “a 依賴于b, b 依賴于c, c 依賴于 d, d 依賴于e”, 要獲取‘a(chǎn)’的實(shí)例,你必須依次引入 ‘e,d,c,b’然后依次進(jìn)行實(shí)例化。維護(hù)成本上升,開(kāi)發(fā)成本上升,大家都是接盤(pán)俠。


再舉一個(gè)栗子:游戲平臺(tái)steam/battle
如果沒(méi)有游戲平臺(tái),幾個(gè)好友想要聯(lián)機(jī)打魔獸爭(zhēng)霸,我們過(guò)去是怎么做的?
1.每個(gè)人首先一起下載相同版本的游戲
2.安裝驅(qū)動(dòng)程序
3.建立/進(jìn)入 局域互聯(lián)網(wǎng)絡(luò)
4.關(guān)閉防火墻
5.建房間,進(jìn)入房間,開(kāi)始游戲
如果我們玩了一段時(shí)間,想換星際爭(zhēng)霸玩,那我們需要再來(lái)一次以上步驟。
最終,我們玩游戲這個(gè)動(dòng)作是依賴于前面很多步驟的,如果有一步出了錯(cuò),那么久不能正常開(kāi)始游戲。
Steam/battle游戲平臺(tái)做了什么?
當(dāng)我們?cè)谟螒蚱脚_(tái)上面要一起玩一款游戲時(shí),我們只需要:
1.下載安裝游戲平臺(tái)
2.選擇一款游戲使用平臺(tái)一鍵安裝
3.開(kāi)始游戲
這時(shí),如果我們要換一款游戲,只需要換個(gè)游戲平臺(tái)一鍵安裝,然后開(kāi)始游戲,不需要擔(dān)心和理會(huì)之前安裝的游戲和開(kāi)始游戲流程對(duì)新游戲有什么影響。

有了以上的思路,我們就可以建一個(gè)steam類和游戲類了...

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

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

相關(guān)文章

  • PHP程序員如何理解IoC/DI

    摘要:依賴注入容器管理應(yīng)用程序中的全局對(duì)象包括實(shí)例化處理依賴關(guān)系。為了解決這樣的問(wèn)題,我們?cè)俅位氐饺肿?cè)表創(chuàng)建組件。參考文章程序員如何理解依賴注入容器補(bǔ)充很多代碼背后,都是某種哲學(xué)思想的體現(xiàn)。 思想 思想是解決問(wèn)題的根本思想必須轉(zhuǎn)換成習(xí)慣構(gòu)建一套完整的思想體系是開(kāi)發(fā)能力成熟的標(biāo)志——《簡(jiǎn)單之美》(前言) . 成功的軟件項(xiàng)目就是那些提交產(chǎn)物達(dá)到或超出客戶的預(yù)期的項(xiàng)目,而且開(kāi)發(fā)過(guò)程符合時(shí)間和費(fèi)...

    DataPipeline 評(píng)論0 收藏0
  • 【譯文】PHP-DI依賴注入的最佳實(shí)踐

    摘要:在構(gòu)造函數(shù)中注入依賴性在中作為服務(wù)的控制器這是痛苦的,當(dāng)你有個(gè)以上的依賴項(xiàng),你的構(gòu)造函數(shù)是行樣板代碼在屬性中注入依賴性這是我們建議的解決方案。 PHP-DI是用PHP編寫(xiě)的、強(qiáng)大的和實(shí)用的、框架無(wú)關(guān)的依賴注入容器。這是一個(gè)關(guān)于如何使用PHP-DI和依賴注入的最佳實(shí)踐指南。 文章來(lái)源于PHP-DI,作者:Matthieu Napoli和貢獻(xiàn)者。PHP-DI是用PHP編寫(xiě)的、強(qiáng)大的和實(shí)用的...

    ivydom 評(píng)論0 收藏0
  • PHP程序員如何理解依賴注入容器(dependency injection container)

    摘要:代碼這就是控制反轉(zhuǎn)模式。是變量有默認(rèn)值則設(shè)置默認(rèn)值是一個(gè)類,遞歸解析有默認(rèn)值則返回默認(rèn)值從容器中取得以上代碼的原理參考官方文檔反射,具有完整的反射,添加了對(duì)類接口函數(shù)方法和擴(kuò)展進(jìn)行反向工程的能力。 PHP程序員如何理解依賴注入容器(dependency injection container) 背景知識(shí) 傳統(tǒng)的思路是應(yīng)用程序用到一個(gè)Foo類,就會(huì)創(chuàng)建Foo類并調(diào)用Foo類的方法,假如這...

    Coding01 評(píng)論0 收藏0
  • Spring還可以這么學(xué)--IoC(控制反轉(zhuǎn)) / DI(依賴注入)理解

    摘要:對(duì)象之間耦合度過(guò)高的系統(tǒng),必然會(huì)出現(xiàn)牽一發(fā)而動(dòng)全身的情形??刂票环崔D(zhuǎn)之后,獲得依賴對(duì)象的過(guò)程由自身管理變?yōu)榱擞扇萜髦鲃?dòng)注入。于是,他給控制反轉(zhuǎn)取了一個(gè)更合適的名字叫做依賴注入。 Spring還可以這么學(xué)--IoC(控制反轉(zhuǎn)) / DI(依賴注入)理解 聲明:文章的前三部分參考博文:https://www.cnblogs.com/Nouno...這篇文章首發(fā)是在我的個(gè)人微信訂閱號(hào)每天學(xué)編...

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

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

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

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

0條評(píng)論

閱讀需要支付1元查看
<