设计模式之依赖倒置原则
文章目錄
- 依賴倒置原則(Dependence Inversion Principle, DIP)
- 代碼實(shí)現(xiàn)
- 總結(jié):
依賴倒置原則(Dependence Inversion Principle, DIP)
依賴倒置原則即要依賴于抽象,不依賴于實(shí)現(xiàn)。
- 高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴其抽象
- 抽象不應(yīng)該依賴細(xì)節(jié)
- 細(xì)節(jié)應(yīng)該依賴抽象
代碼實(shí)現(xiàn)
依賴倒置在java中的實(shí)現(xiàn):比如一位媽媽要給孩子講故事
public class Book {public String getContext(){return "從前有座山。。。。。";} } public class Mother {public void tell(Book book){System.out.print("mom開始講故事:");System.out.println(book.getContext());} } public class Child {public static void main(String[] args) {Mother mother = new Mother();mother.tell(new Book());} }如果我們把書換成日記,報(bào)紙之類的,發(fā)現(xiàn)媽媽居然讀不了日記或報(bào)紙,想讓媽媽讀報(bào)紙必須得改變媽媽的代碼,這顯然是不合理的
public class Diary {public String getContext(){return "日記:今天是xxxxx";} }新增一個(gè)接口,讀物IReader,書籍、日記、報(bào)紙等可以讀的東西都實(shí)現(xiàn)讀物接口
public interface IReader {/*** 獲取所讀的內(nèi)容* @return*/public String getContext(); }改動(dòng)后的Mother類
public class Mother {public void tell(IReader reader){//只要拿到讀物的實(shí)現(xiàn)類,不管是新聞還是什么,都可以讀System.out.print("mom開始講");System.out.println(reader.getContext());} }將之前的Book類和Diary類都實(shí)現(xiàn)讀物接口
public class Book implements IReader{@Overridepublic String getContext() {return "故事書:從前有座山,。。。。。";} } public class Diary implements IReader{@Overridepublic String getContext() {return "日記:今天是xxxx";} }再想讓媽媽讀報(bào)紙,只需實(shí)現(xiàn)讀物IReader接口即可
public class NewsPaper implements IReader{@Overridepublic String getContext() {return "報(bào)紙:北約停止東擴(kuò),烏蘇關(guān)系降溫";} }這樣修改之后,無(wú)論Child做什么改動(dòng),都不需要修改Mother類中的內(nèi)容,
測(cè)試:
實(shí)際開發(fā)中,Mother類代表高層類,負(fù)責(zé)完成主要的業(yè)務(wù)邏輯,如果修改錯(cuò)誤的風(fēng)險(xiǎn)極大。開始寫的程序Mother依賴于Book類,耦合性較高,是不可取的,Mother必須在Book類加載后才能閱讀。
修改后的程序,Mother和Book類、Diary類都是沒有聯(lián)系的。這就是依賴倒置原則的使用,可以降低類之間的耦合性,提高系統(tǒng)的穩(wěn)定性,降低修改程序造成的風(fēng)險(xiǎn)。
實(shí)際編程中一般需做到如下3點(diǎn):
- 低層模塊盡量都要有抽象類或接口,或者兩者都有
- 變量的聲明類型盡量是抽象類和接口
- 使用繼承時(shí)遵循里氏代換原則
總結(jié):
IReader相當(dāng)于基類,IReader出現(xiàn)的地方都可以用實(shí)現(xiàn)子類去替換它,這就是里氏代換原則(Liskov Substitution Principle LSP),任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。
里氏代換原則是依賴倒置原則的基礎(chǔ),依賴倒置原則的核心就是要面向接口編程,理解了面向接口編程,也就理解了依賴倒置。
總結(jié)
以上是生活随笔為你收集整理的设计模式之依赖倒置原则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机组成原理-检错码、纠错码
- 下一篇: asp.net ajax控件工具集 Au