設計模式 七大設計原則(一)

2021-10-07 11:20:47 字數 3871 閱讀 7367

簡單介紹一下七大設計原則:

開閉原則:是所有物件導向設計的核心,對擴充套件開放,對修改關閉

依賴倒置原則:針對介面程式設計,依賴於抽象而不依賴於具體

單一職責原則:乙個介面只負責一件事情,只能有乙個原因導致類變化

介面隔離原則:使用多個專門的介面,而不是使用乙個總介面

迪公尺特法則(最少知道原則):只和朋友交流(成員變數、方法輸入輸出引數),不和陌生人說話,控制好訪問修飾符

黎克特制替換原則:子類可以擴充套件父類的功能,但不能改變父類原有的功能

合成復用原則:盡量使用物件組合(has-a)/聚合(contanis-a),而不是繼承關係達到軟體復用的目的

指乙個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉。所謂的開閉,也正是對擴充套件和修改兩個行為的乙個原則。強調的是用抽象構建框架,用實現擴充套件細節。可以提高軟體系統的可復用性及可維護性。開閉原則,是物件導向設計中最基礎的設計原則。它指導我們如何建立穩定靈活的系統,例如:我們版本更新,我盡可能不修改源**,但是可以增加新功能。

在現實生活中對於開閉原則也有體現。比如,很多網際網路公司都實行彈性制作息時間,規定每天工作 8 小時。意思就是說,對於每天工作 8 小時這個規定是關閉的,但是你什麼時候來,什麼時候走是開放的。早來早走,晚來晚走。

實現開閉原則的核心思想就是面向抽象程式設計,接下來我們來看一段**:

以書店銷售書籍為例,建立書籍介面:

/**

* @author eamon.zhang

* @date 2019-09-25 上午10:26

*/public inte***ce ibook

書籍分為很多類,比如有**類等,建立**類書籍:

/**

* @author eamon.zhang

* @date 2019-09-25 上午10:30

*/public class novelbook implements ibook

// 獲取書名

public string getname()

// 獲取**

public int getprice()

// 獲取作者

public string getauthor()

}

現在我們要給**類書籍做乙個活動,**優惠。如果修改 novelbook 中的 getprice()方法,則會存在一定的風險,可能影響其他地方的呼叫結果。我們如何在不修改原有**前提前下,實現**優惠這個功能呢?現在,我們再寫乙個處理優惠邏輯的類,noveldiscountbook 類(思考一下為什麼要叫 noveldiscountbook,而不叫 discountbook):

/**

* @author eamon.zhang

* @date 2019-09-25 上午10:36

依賴倒置原則(dependenceinversionprinciple,dip)是指設計**結構時,高層模組不應該依賴底層模組,二者都應該依賴其抽象。抽象不應該依賴細節;細節應該依賴抽象。通過依賴倒置,可以減少類與類之間的耦合性,提高系統的穩定性,提高**的可讀性和可維護性,並能夠降低修改程式所造成的風險。

/**

* @author eamon.zhang

* @date 2019-09-25 上午11:09

*/public class eamon

public void readtheoldmanandthesea()

}

寫個測試類呼叫一下:

public static void main(string args)
eamon 目前正在閱讀者兩本書。但是學習是無止境的,eamon 讀完這些書之後還想讀《天龍八部》。這個時候,業務擴充套件,我們的**要從底層到高層(呼叫層)一次修改**。在 eamon 類中新增 readtianlongbabu()的方法,在高層也要追加呼叫。如此一來,系統發布以後,實際上是非常不穩定的,在修改**的同時也會帶來意想不到的風險。接下來我們優化**,建立乙個課程的抽象 ibook 介面:

/**

* @author eamon.zhang

* @date 2019-09-25 上午11:20

*/public inte***ce ibook

然後寫notredamebook類:

/**

* @author eamon.zhang

* @date 2019-09-25 上午11:22

*/public class notredamebook implements ibook

}

再寫theoldmanandtheseabook類:

/**

* @author eamon.zhang

* @date 2019-09-25 上午11:23

*/public class theoldmanandtheseabook implements ibook

}

修改eamon

/**

* @author eamon.zhang

* @date 2019-09-25 上午11:09

*/public class eamon

}

來看呼叫:

public static void main(string args)
我們這時候再看來**,eamon 再想讀任何書,對於新書,我只需要新建乙個類,通過傳參的方式告訴 eamon,而不需要修改底層**。實際上這是一種大家非常熟悉的方式,叫依賴注入。注入的方式還有構造器方式和 setter 方式。我們來看構造器注入方式:

/**

* @author eamon.zhang

* @date 2019-09-25 上午11:09

*/public class eamon

private ibook ibook;

public void read()

}

看呼叫**:

public static void main(string args)
根據構造器方式注入,在呼叫時,每次都要建立例項。那麼,如果 eamon 是全域性單例,則我們就只能選擇用 setter 方式來注入,繼續修改 eamon 類的**:

/**

* @author eamon.zhang

* @date 2019-09-25 上午11:09

*/public class eamon

public void read()

}

看呼叫**:

文中部分內容參考網路!

封面圖源網路,侵刪!

內容為原創,**請註明出處!

設計模式 七大設計原則

定義 應該有且只有乙個原因,引起類的變更 組合是一種強耦合關係,你我都有共同的生命週期,這種強耦合關係,不如直接使用介面實現 建議 介面一定要做到單一原則,類的設計盡量做到只有乙個原因引起變更 定義 所有使用父類的地方,必須能夠透明的使用其子類,反之不行 子類不能完整地實現父類的方法,或者父類的某些...

設計模式 七大設計原則(二)

簡單介紹一下七大設計原則 開閉原則 是所有物件導向設計的核心,對擴充套件開放,對修改關閉 依賴倒置原則 針對介面程式設計,依賴於抽象而不依賴於具體 單一職責原則 乙個介面只負責一件事情,只能有乙個原因導致類變化 介面隔離原則 使用多個專門的介面,而不是使用乙個總介面 迪公尺特法則 最少知道原則 只和...

七大設計原則

開閉原則 定義 乙個軟體實體如類 模組和函式應該對擴充套件開放 對修改關閉 用抽象構建框架,用實現擴充套件細節 優點 提高軟體系統的可復用性及可維護性 依賴倒置原則 定義 高層模組不應該依賴低層模組,二者都應該依賴其抽象 抽象不應該依賴細節,細節應該依賴抽象 針對介面程式設計,不要針對實現程式設計 ...