啥是依賴倒置?依賴倒置是SOLID原則之一,詞的字面意思就是將依賴關係的倒置。java
其實依賴倒置你們早就會了,這個實際上就是面向接口編程。舉個例子,如今電子產品更新換代快,可能沒過多久我們就想換一臺電腦玩玩。即便電腦的品牌不一樣,但咱們仍是能夠正常使用,總不會換個牌子就不會用了吧。編程
因此若是用代碼表示的話,咱們用接口IPC
來代替具體的類,而後各個類去實現它的programming
方法。框架
public interface IPC{ void programming(); } public class User { private IPC pc; //若是寫成private Dell dell; //那咱們換成聯想的電腦就麻煩了 public User(IPC pc) { this.pc = pc; } public void usePC(){ pc.programming(); } }
爲啥叫它倒置呢,由於函數
是否是箭頭倒過來了呢😁this
依賴注入是實現控制反轉的具體手段,這倆聽起來高大上,其實...設計
public class Main { public static void main(String[] args) { //建立對象 Dell dell=new Dell(); //依賴注入 User user=new User(dell); user.usePC(); } }
依賴注入指的是不在類內部使用new來建立依賴對象,而是將其在外部建立好後,經過構造函數或者賦值函數注入進類中,也就是當參數傳進去。code
而控制反轉就是依賴注入中說的,將依賴類實例化的控制權交給外部邏輯處理。我不心繫你這東西的建立,我只關心你提供的功能,一切都按個人標準指定好,拿來用就行。對象
好比咱們筆記本電腦的各個部分是不一樣廠家生產的,筆記本電腦廠商只需把標準給各個零件生產商,讓他們按要求生產,本身最後組裝拿來用就行了。這樣咱們就達到了解耦的目的。blog
由於咱們在程序設計時採用了依賴注入,那麼不可避免的,咱們要在程序裏寫大量的new。但對象的建立與依賴注入跟具體的業務並沒有關係,咱們可不能夠將其抽象成框架呢?接口
因而咱們就有了IOC容器或者說依賴注入框架,只須要簡單配置一下就能夠由框架自動建立對象、管理對象以及依賴注入這些本來須要咱們本身來作的事情。