5分鐘理解依賴注入和控制反轉

基本的解釋

想必打開這篇文章的人,對依賴注入和控制反轉都有了大體的概念。簡單的說:控制反轉是依賴注入的實現。php

舉一個例子

男人A 要找女友,他能夠去網聊、去夜店、去酒吧等等各類地方碰運氣,花錢花時間。這是一種找女友的方法,也是不少人的作法。設計模式

男人B 要找女友,他年紀大了沒有那麼多時間和精力在這方面花費氣力,直接去相親。這是不少大齡青年找女友的方法,也就是今天想說的方法。框架

簡單的說明

假設以上例子就是找女友,找到女友就OK。那麼哪個效率更高呢?顯然是男人B。函數

對於男人B 來講,他的目標是找女友,他 依賴 相親 注入 女友。這裏的相親能夠理解成爲一個服務,好比說婚戀網站,同事朋友的介紹,婚介所等等。網站

對於男人A 來講,他的所投入的時間和金錢等,能夠擁有更高質量的女友。可能對這個女友瞭如指掌,能徹底摸清楚她的脾氣,以致於可以控制她。設計

但對於男人B 來講,想了解和控制這個女友就很差說了。由於一點都不瞭解,更別說控制了。換句話說:控制 這個女友的能力,徹底 反轉 了。code

代碼的解釋

不少人不理解依賴注入和控制反轉主要是不熟悉適用場景,其實在不少框架中咱們說用到了 IoC 和 DI,實際上都是一回事,他實際上就是咱們設計模式的一種:門面模式,也稱外觀模式。get

實際上,在去理解 依賴注入控制反轉 時,咱們須要有兩個概念。it

  1. 咱們須要作一件事;
  2. 項目中有提供作這件事的方法。

實際的代碼

class Boy {
    public function getGirlfriend() {
        $site = new LoveSite();
        $site->createGirl();
    }
}

class LoveSite {
    public function createGirl() {}
}

$boy = new Boy;
$boy->getGirlfriend();

以上代碼是個例子,對於 Boy 來講, LoveSite 是他的一個依賴,只有在使用 Boy,並調用 getGirlfriend 方法的時候,纔會被它注入,並建立一個 girl。io

而控制反轉在這個例子中的體現就是用單獨的一個 LoveSite 類去實現 createGirl 的功能,而不是把這個函數的代碼寫在 Boy 類中。

以上。。。

相關文章
相關標籤/搜索