高層模組不應該依賴低層模組,兩者都應該依賴其抽象;抽象不應該依賴細節,細節應該依賴抽象。簡單的說就是要求對抽象進行程式設計,不要對實現進行程式設計,這樣就降低了客戶與實現模組間的耦合。
現要組裝一台電腦,需要配件cpu,硬碟,記憶體條。只有這些配置都有了,計算機才能正常的執行。選擇cpu有很多選擇,如intel,amd等,硬碟可以選擇希捷,西數等,記憶體條可以選擇金士頓,海盜船等。
希捷硬碟類(xijieharddisk):
public
class
xijieharddisk
implements
harddisk
public string get()
}
intel處理器(intelcpu):
public
class
intelcpu
implements
cpu}
金士頓記憶體條(kingstonmemory):
public
class
kingstonmemory
implements
memory
}
電腦(computer):
public
class
computer
public
void
setcpu
(intelcpu cpu)
public kingstonmemory getmemory()
public
void
setmemory
(kingstonmemory memory)
public xijieharddisk getharddisk()
public
void
setharddisk
(xijieharddisk harddisk)
public
void
run(
)}
測試類(testcomputer):測試類用來組裝電腦。
public
class
testcomputer
}
執行計算機
使用希捷希捷硬碟取資料
從硬碟上獲取的資料是:資料
使用intel處理器
使用金士頓記憶體條
上面**可以看到已經組裝了一台電腦,但是似乎組裝的電腦的cpu只能是intel的,記憶體條只能是金士頓的,硬碟只能是希捷的,這對使用者肯定是不友好的,使用者有了機箱肯定是想按照自己的喜好,選擇自己喜歡的配件。
根據依賴倒轉原則進行改進。**只需要修改computer類,讓computer類依賴抽象(各個配件的介面),而不是依賴於各個元件具體的實現類。
// 獲取資料的方法
public string get()
}computer
public
class
computer
public
void
setharddisk
(harddisk harddisk)
public cpu getcpu()
public
void
setcpu
(cpu cpu)
public memory getmemory()
public
void
setmemory
(memory memory)
public
void
run(
)}
computerdemo
public
class
computerdemo
}
執行計算機
使用希捷希捷硬碟取資料
從硬碟上獲取的資料是:資料
使用intel處理器
使用金士頓記憶體條
物件導向的開發很好的解決了這個問題,一般情況下抽象的變化概率很小,讓使用者程式依賴於抽象,實現的細節也依賴於抽象。即使實現細節不斷變動,只要抽象不變,客戶程式就不需要變化。這大大降低了客戶程式與實現細節的耦合度。 依賴倒轉原則
1 所謂依賴倒置原則 dependence inversion principle 就是要依賴於抽象,不要依賴於具體。簡單的說就是要求對抽象進行程式設計,不要對實現進行程式設計,這樣就降低了客戶與實現模組間的耦合。2 面向過程的開發,上層呼叫下層,上層依賴於下層,當下層劇烈變動時上層也要跟著變動,這...
依賴倒轉原則
一 什麼是依賴倒轉原則?抽象不應當依賴於細節 細節應當依賴於抽象 或者說 要針對介面程式設計,不要針對實現程式設計 二 為什麼叫做依賴倒轉原則?傳統的過程性系統設計傾向於使高層次的模組依賴於低層次的模組 抽象層次依賴於具體層次。依賴倒轉原則就是要把這種依賴關係倒轉。抽象層包含的是系統的商務邏輯和巨集...
依賴倒轉原則
依賴倒轉原則 依賴倒轉原則,意思就是抽象不應該依賴細節,細節應該依賴抽象,說白了,就是要針對介面程式設計,不要對實現程式設計。為什麼要叫 倒轉 面向過程開發時,為了使 可以復用,一般會把常用的 封裝成許多函式的程式庫,這樣再寫新專案時這些底層 也可以使用,這種情況就是高層模組依賴底層模組,這屬於 正...