高層模組不應該依賴低層模組,兩者都應該依賴其抽象;
抽象不應該依賴細節,細節應該依賴抽象。
簡單的說就是要求對抽象進行程式設計,不要對實現進行程式設計,
這樣就降低了客戶與實現模組間的耦合。
【例】組裝電腦
現要組裝一台電腦,需要配件cpu,硬碟,記憶體條。只有這些配置都有了,計算機才能正常的執行。
選擇cpu有很多選擇,如intel,amd等,硬碟可以選擇希捷,西數等,記憶體條可以選擇金士頓,海盜船等。
* @description: 金士頓記憶體條類
* @author: dym
*/public class kingstonmemory
}
package com.itheima.principles.demo3.before;
/** * @version v1.0
* @classname: xijieharddisk
* @description: 希捷硬碟
* @author: dym
*/public class xijieharddisk
//獲取資料的方法
public string get()
}
package com.itheima.principles.demo3.before;
/** * @version v1.0
* @classname: computer
* @description: todo(一句話描述該類的功能)
* @author: dym
*/public class computer
public void setharddisk(xijieharddisk harddisk)
public intelcpu getcpu()
public void setcpu(intelcpu cpu)
public kingstonmemory getmemory()
public void setmemory(kingstonmemory memory)
public void run()
}
package com.itheima.principles.demo3.before;
/** * @version v1.0
* @classname: computerdemo
* @description: todo(一句話描述該類的功能)
上面**可以看到已經組裝了一台電腦,但是似乎組裝的電腦的cpu只能是intel的,記憶體條只能是金士頓的,硬碟只能是希捷的,
這對使用者肯定是不友好的,使用者有了機箱肯定是想按照自己的喜好,選擇自己喜歡的配件。
根據依賴倒轉原則進行改進:
**我們只需要修改computer類,讓computer類依賴抽象(各個配件的介面),而不是依賴於各個元件具體的實現類。
* @description: cpu介面
* @author: dym
*/public inte***ce cpu
package com.itheima.principles.demo3.after;
/** * @version v1.0
* @classname: intelcpu
* @description: intel cpu
* @author: dym
*/public class intelcpu implements cpu
}
package com.itheima.principles.demo3.after;
/** * @version v1.0
* @classname: harddisk
* @description: 硬碟介面
* @author: dym
*/public inte***ce harddisk
package com.itheima.principles.demo3.after;
/** * @version v1.0
* @classname: xijieharddisk
* @description: 希捷硬碟
* @author: dym
*/public class xijieharddisk implements harddisk
//獲取資料的方法
public string get()
}
package com.itheima.principles.demo3.after;
/** * @version v1.0
* @classname: memory
* @description: 記憶體條介面
* @author: dym
*/public inte***ce memory
package com.itheima.principles.demo3.after;
/** * @version v1.0
* @classname: kingstonmemory
* @description: 金士頓記憶體條類
* @author: dym
*/public class kingstonmemory implements memory
}
package com.itheima.principles.demo3.after;
/** * @version v1.0
* @classname: computer
* @description: todo(一句話描述該類的功能)
* @author: dym
*/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()
}
package com.itheima.principles.demo3.after;
/** * @version v1.0
* @classname: computerdemo
* @description: todo(一句話描述該類的功能)
* @author: dym
*/public class computerdemo
}
設計原則 依賴倒轉原則
設計原則 依賴倒轉原則 dip 依賴倒轉原則 抽象不應該依賴細節,細節應該依賴抽象。通俗地說,就是要針對介面程式設計,而不要對具體實現程式設計。比如無論主機板 cpu 記憶體 硬碟都是在針對介面設計的,如果針對實現來設計,記憶體就要對應到具體的品牌的主機板,就會出現換記憶體需要把主機板也換掉的尷尬。...
軟體設計原則 依賴倒置原則
依賴倒置原則 dependence inversion principle,dip 高層模組不應該依賴底層模組,二者都應該依賴其抽象.抽象不應該依賴細節,細節應該依賴抽象.new 乙個小明 public class xiaoming public void studyartscourse 呼叫一下 ...
軟體設計原則 依賴倒置原則(DIP)
要依賴於抽象,不要依賴於具體。要針對介面程式設計,不要針對實現程式設計。陳述 分析 層次化 booch 對上述論述可能存在兩種不同的理解 1 依賴關係倒置 下層的實現,依賴於上層的介面 2 介面所有權倒置 客戶擁有介面,而服務者則從這些介面派生 我們可以分兩種模式來定義 1 依賴不倒置的開發 自頂向...