Changes between Version 7 and Version 8 of waue/2011/spring
- Timestamp:
- Aug 24, 2011, 5:39:05 PM (13 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
waue/2011/spring
v7 v8 70 70 由於save()程式依賴於依賴於saveToFloppy(),如果今天要更換低層的存儲模組為Usb碟,則這個程式沒有辦法重用,必須加以修改才行,低層模組的更動造成了高層模組也必須跟著更動,這不是一個好的設計方式,在設計上希望模組都依賴於模組的抽象,這樣才可以重用高層的業務設計。 71 71 72 如果以物件導向的方式來設計, 依賴反轉(Dependency Inversion)的解釋變為程式不應依賴實作,而是依賴於抽象,實作必須依賴於抽象。來看看下面這個 Java 程式:73 74 {{{ 72 如果以物件導向的方式來設計,Dependency Injection 的解釋變為程式不應依賴實作,而是依賴於抽象,實作必須依賴於抽象。來看看下面這個 Java 程式: 73 74 {{{ 75 75 #!java 76 76 public class BusinessObject { … … 129 129 }}} 130 130 131 從這個角度來看,Dependency In version 的意思即是程式不依賴於實作,而是程式與實作都要依賴於抽象。131 從這個角度來看,Dependency Injection 的意思即是程式不依賴於實作,而是程式與實作都要依賴於抽象。 132 132 133 133 IoC 的 Control 是控制的意思,其實其背後的意義也是一種依賴關係的轉移,如果A依賴於B,其意義即是B擁有控制權,您想要轉移這種關係,所以依賴關係的反轉即是控制關係的反轉,藉由控制關係的轉移,可以獲得元件的可重用性,在上面的 Java 程式中,整個控制權從實際的 FloppyWriter 轉移至抽象的 IDeviceWriter 介面上,使得BusinessObject、FloppyWriter、UsbDiskWriter 這幾個實現依賴於抽象的 IDeviceWriter 介面。