【文章內(nèi)容簡介】
, and Practices》 中。 Page 26 依賴倒轉(zhuǎn)原則 ? 依賴倒轉(zhuǎn)原則分析 ?簡單來說,依賴倒轉(zhuǎn)原則就是指: 代碼要依賴于抽象的類,而不要依賴于具體的類 ; 要針對接口或抽象類編程,而不是針對具體類編程 。 ?實(shí)現(xiàn)開閉原則的關(guān)鍵是抽象化,并且從抽象化導(dǎo)出具體化實(shí)現(xiàn),如果說 開閉原則是面向?qū)ο笤O(shè)計(jì)的目標(biāo)的話 ,那么依賴倒轉(zhuǎn)原則就是面向?qū)ο笤O(shè)計(jì)的主要手段。 Page 27 依賴倒轉(zhuǎn)原則 ? 依賴倒轉(zhuǎn)原則分析 ?依賴倒轉(zhuǎn)原則的常用實(shí)現(xiàn)方式之一是 在代碼中使用抽象類,而將具體類放在配置文件中 。 ? “ 將抽象放進(jìn)代碼,將細(xì)節(jié)放進(jìn)元數(shù)據(jù) ” 《 程序員修煉之道:從小工到專家 》 Page 28 依賴倒轉(zhuǎn)原則 ? 依賴倒轉(zhuǎn)原則分析 ?類之間的耦合 ? 零耦合 關(guān)系 ? 具體耦合 關(guān)系 ? 抽象耦合 關(guān)系 ?依賴倒轉(zhuǎn)原則要求客戶端依賴于抽象耦合, 以抽象方式耦合是依賴倒轉(zhuǎn)原則的關(guān)鍵 。 Page 29 依賴倒轉(zhuǎn)原則 ? 依賴倒轉(zhuǎn)原則分析 ?依賴注入 Page 30 依賴倒轉(zhuǎn)原則 ? 依賴倒轉(zhuǎn)原則分析 ?依賴注入 ? 構(gòu)造注入 (Constructor Injection):通過 構(gòu)造函數(shù) 注入實(shí)例變量。 ? 設(shè)值注入 (Setter Injection):通過 Setter方法 注入實(shí)例變量。 ? 接口注入 (Interface Injection):通過 接口方法 注入實(shí)例變量。 Page 31 依賴倒轉(zhuǎn)原則 ? 依賴倒轉(zhuǎn)原則分析 ?構(gòu)造注入 public interface AbstractBook { public void view()。 } public interface AbstractReader { public void read()。 } public class ConcreteBook implements AbstractBook { public void view() { …… } } public class ConcreteReader implements AbstractReader { private AbstractBook book。 public ConcreteReader(AbstractBook book) { = book。 } public void read() { ()。 } } Page 32 依賴倒轉(zhuǎn)原則 ? 依賴倒轉(zhuǎn)原則分析 ?設(shè)值注入 public interface AbstractBook { public void view()。 } public interface AbstractReader { public void setBook(AbstractBook book)。 public void read()。 } public class ConcreteBook implements AbstractBook { public void view() { ...... } } public class ConcreteReader implements AbstractReader { private AbstractBook book。 public void setBook(AbstractBook book) { = book。 } public void read() { ()。 } } Page 33 依賴倒轉(zhuǎn)原則 ? 依賴倒轉(zhuǎn)原則分析 ?接口注入 public interface AbstractBook { public void view()。 } public interface AbstractReader { public void read(AbstractBook book)。 } public class ConcreteBook implements AbstractBook { public void view() { ...... } } public class ConcreteReader implements AbstractReader { public void read(AbstractBook book) { ()。 } } Page 34 依賴倒轉(zhuǎn)原則 ? 依賴倒轉(zhuǎn)原則實(shí)例 ?實(shí)例說明 ? 某系統(tǒng)提供一個(gè)數(shù)據(jù)轉(zhuǎn)換模塊,可以將來自不同數(shù)據(jù)源的數(shù)據(jù)轉(zhuǎn)換成多種格式,如可以轉(zhuǎn)換來自數(shù)據(jù)庫的數(shù)據(jù)(DatabaseSource)、也可以轉(zhuǎn)換來自文本文件的數(shù)據(jù)(TextSource),轉(zhuǎn)換后的格式可以是 xml文件(XMLTransformer)、也可以是 xls文件 (XLSTransformer)等。 Da ta ba se So ur ceMa in Cl as s+ m ai n (S trin g ar gs []) : v oi dT ex tS ou rceX ML T ra ns fo rm erX LS T ra ns fo rm erPage 35 依賴倒轉(zhuǎn)原則 ? 依賴倒轉(zhuǎn)原則實(shí)例 ?實(shí)例說明 ? 由于需求的變化,該系統(tǒng)可能需要增加新的數(shù)據(jù)源或者新的文件格式,每增加一個(gè)新的類型的數(shù)據(jù)源或者新的類型的文件格式,客戶類 MainClass都需要修改源代碼,以便使用新的類,違背了開閉原則。現(xiàn)使用依賴倒轉(zhuǎn)原則對其進(jìn)行重構(gòu)。 Page 36 依賴倒轉(zhuǎn)原則 ? 依賴倒轉(zhuǎn)原則實(shí)例 ?實(shí)例解析 DatabaseSourceMainC lass+ m ain (String args[]) : voidT ex tSourceX MLT ransform erX LST ransform erA bstractSourceA bstractT ransform er...... so u r ce N a m e D a t a b a se S o u r ce / so u r ce N a m e t r a n sf o r m e r N a m e X M L T r a n sf o r m e r / t r a n sf