物件導向之6大設計原則!

2021-10-10 18:07:32 字數 1559 閱讀 2153

1.開閉原則。

乙個軟體實體,如類,模組和函式應該對外擴充套件開發,對內修改關閉。

解讀:用抽象構建框架,用實現擴充套件細節。不以改動原有類的方式來實現新需求,而是應該以實現事先抽象出來的介面(或具體類繼承抽象類)的方式來實現。

優點:開閉原則的優點在於可以在不改動原有**的前提下給程式擴充套件功能。增加了程式的可擴充套件性,同時也降低了程式的維護成本。

2.單一職責原則。

乙個類只允許有乙個職責,即只有乙個導致該類變更的原因。

解讀:類職責的變化往往就是導致類變化的原因:也就是說如果乙個類具有多種職責,就會有多種導致這個類變化的原因,從而導致這個類的維護變得困難。往往在軟體開發中,隨著需求的不斷增加,可能會給原來的類新增一些本來不屬於它的一些職責,從而違反了單一職責原則。如果我們發現當前類的職責不僅僅有乙個,就應該將本來不屬於該類真正的職責分離出去。不僅僅是類,函式也要遵循單一職責原則,即乙個函式製作一件事情。如果發現乙個函式裡面有不同的任務,則需要將不同的任務以另乙個函式的形式分離出去。

優點:如果類與方法的職責劃分的很清晰,不但可以提高**的可讀性,更實際性地更降低了程式出錯的風險,因為清晰的**會讓bug無處藏身,也有利於bug的追蹤,也就是降低了程式的維護成本。

3.依賴倒置原則。

依賴抽象而不是依賴實現。抽象不應該依賴細節,細節應該依賴抽象。高層模組不能依賴低層模組,二者都應該依賴抽象。

解讀:針對介面程式設計,而不是針對實現程式設計。盡量不要從具體的類派生,而是以繼承抽象類或實現介面來實現。關於高層模組與低層模組的劃分可以按照決策能力的高低進行劃分。業務層自然就處於上層模組,邏輯層和資料層自然就歸類為底層。

優點:通過抽象來搭建框架,建立類和類的關聯,以減少類間的耦合性。而且以抽象搭建的系統要比以具體實現搭建的系統更加穩定,擴充套件性更高,同時也便於維護。

4.介面分離原則。

多個特定的客戶端介面要好於乙個通用性的總介面。

解讀:客戶端不應該依賴它不需要實現的介面。不建立龐大臃腫的介面,應盡量細化介面,介面中的方法應盡量少。需要注意的是介面的力度也不能太小,如果過小,則會造成介面數量過多,使設計複雜化。

優點:避免同乙個介面裡面包含不同類職責的方法,介面責任劃分更加明確,符合高內聚低耦合的思想。

5.迪公尺特法則

乙個物件應該對盡可能少的物件有接觸,也就是只接觸那些真正需要接觸的物件。

解讀:迪公尺特法則也叫做最少知道原則,乙個類應該只和它的成員變數,方法的輸入,返回引數中的類作交流,而不應該引入其他的類(間接交流)。

優點:實踐迪公尺特法則可以良好地降低類與類之間的耦合,減少類與類之間的關聯程度,讓類與類之間的協作更加直接。

6.黎克特制替換原則。

所有引用基類的地方必須能透明地使用其子類的物件,也就是說子類物件可以替換其父類物件,而程式執行效果不變。

解讀:在繼承體系中,子類中可以增加自己特有的方法,也可以實現父類的抽象方法,但是不能重寫父類的非抽象方法,否則該繼承關係就不是乙個正確的繼承關係。

優點:可以檢驗繼承使用的正確性,約束繼承在使用上的氾濫。

物件導向6大原則

單一職責原則的定義是就乙個類而言,應該僅有乙個引起他變化的原因。也就是說乙個類應該只負責一件事情。如果乙個類負責了方法m1,方法m2兩個不同的事情,當m1方法發生變化的時候,我們需要修改這個類的m1方法,但是這個時候就有可能導致m2方法不能工作。這個不是我們期待的,但是由於這種設計卻很有可能發生。所...

物件導向八大設計原則

目的是使程式更加靈活 開 閉原則 目標 總的指導思想 open closed principle 對擴充套件開放,對修改關閉。增加新功能,不改變原有 類的單一職責 乙個類的定義 single responsibility principle 乙個類有且只有乙個改變它的原因。適用於基礎類,不適用基於基...

物件導向七大設計原則

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