如果在 class a 中,有 class b 的例項,則稱 class a 對 class b 有乙個依賴。例如下面類 human 中用到乙個 father 物件,我們就說類 human 對類 father 有乙個依賴。
publicclass
hunman
}
仔細看這段**我們會發現存在一些問題:
(1). 如果現在要改變 father 生成方式,如需要用new father(string name)
初始化 father,需要修改 human **;
(2). 如果想測試不同 father 物件對 human 的影響很困難,因為 father 的初始化被寫死在了 human 的建構函式中;
(3). 如果new father()
過程非常緩慢,單測時我們希望用已經初始化好的 father 物件 mock 掉這個過程也很困難。
依賴注入即di是dependency injection縮寫。
上面將依賴在建構函式中直接初始化是一種 hard init 方式,弊端在於兩個類不夠獨立,不方便測試。我們還有另外一種 init 方式,如下:
publicclass
hunman
}
上面**中,我們將 father 物件作為建構函式的乙個引數傳入。在呼叫 human 的構造方法之前外部就已經初始化好了 father 物件。像這種非自己主動初始化依賴,而通過外部來傳入依賴的方式,我們就稱為依賴注入。
現在我們發現上面 1 中存在的兩個問題都很好解決了,簡單的說依賴注入主要有兩個好處:
(1). 解耦,將依賴之間解耦。
(2). 因為已經解耦,所以方便做單元測試,尤其是 mock 測試。
三分鐘理解Python lambda
這篇主要是複習一下 lambda表示式是一種匿名函式,對應python中的自定義函式def。定義func函式,計算給定數x的平方 def func x return x x 等價於 func lambda x x x 用法,他就是乙個函式,像正常函式那樣呼叫就好 func 6 可以看到,lambda...
《三分鐘理解大小端》
無論筆試還是面試都有一定機率問怎麼判斷大小端,那麼你就很自豪的回答,大端就是資料高位元組放在低位址上,小端就是資料低位元組放在低位址上。好了您回答了這個恭喜下面讓你 實現一下,這個時候很多只是死記硬背的缺陷就會暴露出來。其實 的實現很多方法都是可以的,下面舉例最簡單的一種,就是初始化乙個16進製制的...
三分鐘理解知識蒸餾
知識蒸餾的意義 能夠壓縮模型,提公升模型效能 為什麼能夠壓縮模型?誰知道了告訴我一下!為什麼能提公升模型精度?栗子 分類問題有三個分類 貓,狗,烏龜,實際訓練過程中,比如當前的資料真實標籤是 貓,模型 出貓,狗,烏龜的概率分別是0.6,0.3,0.1,傳統思路 不錯,識別對了,貓的概率最高,給模型一...