上篇我們了解了當依賴注入與面向介面程式設計結合起來,才能真正發揮依賴注入的優勢。這篇我們開始簡單了解一下面向介面程式設計。
什麼是面向介面程式設計?
乙個類依賴其他類的目的是為了獲取其他類所提供的服務,可能這種服務有多種實現,我們可能需要根據不同的場景使用不同的實現。
此時,我們可以使用多型,將同一功能的多種實現抽象出乙個介面,並為所有實現定義一套相同的api。在使用時宣告介面型別的變數而非實現類的變數,並將實現類的物件賦給介面變數,最後用介面變數去呼叫實現類的服務,如:
class a }
這樣,當想使用superimpl_2提供的功能時,只需替換super的實現類,其他地方不做任何變化:
private super super = new superimpl_2();
上述過程就是面向介面程式設計的思想:
思想昇華
若某一類服務有多種不同的實現,我們需要抽象出乙個介面,並在介面中定義一套api。在使用時宣告介面型別變數,並用實現類的物件賦值。接下來通過介面型別的變數呼叫服務即可。當功能發生變化時,僅需替換實現類即可。
依賴注入與面相介面程式設計的結合
上述過程如果要換一種實現,就必須要修改a類的**,再重新編譯。而使用了依賴注入後,由於依賴類不需要自己建立維護被依賴物件,該過程由ioc service provider完成。因此,當需要替換實現類時,只需在ioc service provider中修改,被依賴類、依賴類都不會受到影響,此時這兩個類是松耦合的。
下篇文章將會分享依賴注入的三種方式。
面向介面程式設計
面向介面程式設計 英文的定義是 program to an inte ce,not an implementation 它是物件導向程式設計裡面的乙個設計原則。所謂原則,就是 你最好按我的樣子來做,實在不行也可以違反 物件導向程式設計有三個主要的特性,即是封裝,多型,繼承。面向介面程式設計是多型特性...
面向介面程式設計
物件導向設計裡有一點大家已基本形成共識,就是面向介面程式設計,我想大多數人對這個是沒有什麼覺得需要懷疑的。問題是在實際的專案開發中我們是怎麼體現的呢?難道就是每乙個實現都提供乙個介面就了事了?反過來說,你有時候有沒有覺得介面是多餘的事?又或者,你僅僅是覺得現在類似spring這樣的框架已習慣用介面這...
面向介面程式設計
1 介面shapearea 介面方法 double getarea 求乙個形狀的面積 double getperimeter 求乙個形狀的周長 2 類circle 實現shapearea介面,並有以下屬性和方法 屬性 radius double型別,表示圓的半徑 方法circle double r ...