《K的技術學習筆記》——提高彈性降低耦合:<Dependency Injection>
![](https://assets.matters.news/embed/272ed32a-224f-48c6-b8a9-4d7e6ef77e62.png)
依賴注入 (Dependency injection)是一種編程方式,有編程的人應該有用過這個方式。他的本意就是當前的class所需要的物件不是由class自身創建,而是由外部注入。
現在先舉一些例子來說明,以下例子是關於手機
用家(User)<沒有用依賴注入>
![](https://assets.matters.news/embed/72375588-15d6-4d09-a26b-cccf64a00373.png)
現代社會每一個人都持有手機,我們會用手機來付款(epay)和下載App(downApp)。現在這個用家他持有一個Android手機。現在這個例子並沒有用到依賴注入 (Dependency injection),這裡是直接在Constructor中創建一部Android 手機。
Android手機(AndroidPhone)
![](https://assets.matters.news/embed/c556142c-2377-4de2-a48c-0bee274d2afe.png)
在Android手機中,當我們要下載App就要在Play Store找,要電子付款就用Google pay。這些操作過程就在Android手機裡實作。
除了Android手機外,智能手機還有iPhone。
iPhone(iPhone)
![](https://assets.matters.news/embed/94804801-cd34-4fc9-bf7b-3c14f055e2a5.png)
在iPhone中,當我們要下載App就要在App Store找,要電子付款就用Apple pay。這些操作過程就在iPhone裡實作。
現在用家不用Android手機要用iPhone了,當我們沒有用依賴注入 (Dependency injection)時,就要進入User class的constructor進行修改。因為AndroidPhone和User的耦合很高,所以當我們換走AndroidPhone時,User就會有很多地方要更動,例如constructor,epay和downApp。這次興幸的是iPhone有著和AndroidPhone相似的功能。因此,我們只需要改動constructor。
這時我們用到依賴注入 (Dependency injection)的話,就不用作出修改User class的行為。在大多數使用依賴注入 (Dependency injection)的同時會用到Interface,這樣我們就可以指定要注入有指定功能的物件。
智能電話(SmartPhone Interface)
![](https://assets.matters.news/embed/084c5265-ccb8-4e8e-8750-001cd2a6bda9.png)
這個Interface指定了智能電話要有下載App(downApp)和電子付款(epay)的功能。
用家(User)<使用依賴注入>
![](https://assets.matters.news/embed/b0168049-31bb-47cf-a4fa-62fc8acb1c91.png)
這裡用了依賴注入 (Dependency injection),用家的手機就由外界注入,而這裡我們指定要注入符合智能電話Interface的物件。
iPhone和Android手機(iPhone & AndroidPhone)
![](https://assets.matters.news/embed/448c6172-5b46-4b68-9ea2-7d1c71a65941.png)
現在iPhone和Android手機都實作了智能電話Interface。
除了以上在constructor加上param是依賴注入,開設一個setter來注入都算是依賴注入(Dependency injection)。附上例子:
![](https://assets.matters.news/embed/72b71bde-84a2-4af0-a531-119da41d8517.png)
現在User class裡多了一個setter,他叫setPhone。這個方法也是依賴注入(Dependency injection)的應用。
總結
當使用了依賴注入 (Dependency injection)和Interface,class與class之間的關係也大大減少,也就是我說的低耦合。再者,因為低耦合,現在彈性高了,能輕易替換class裡所需的物件。用了Interface後,我們都知道他有什能功能能用,這樣我們就能在注入不同物件時不必修改class,這是因為注入的物件必定符合Interface。
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!
![](https://imagedelivery.net/kDRCweMmqLnTPNlbum-pYA/prod/avatar/23dcaa94-ad45-47a3-8255-4d2f5bc93a3e.jpeg/public)
- 来自作者
- 相关推荐