設計模式六大原則

2021-10-10 23:45:00 字數 2342 閱讀 7490

在程式設計領域,solid(單一功能、開閉原則、黎克特制替換、介面隔離以及依賴反轉)是由羅伯特·c·馬丁在21世紀早期引入的記憶術首字母縮略字,指代了物件導向程式設計和物件導向設計的五個基本原則。當這些原則被一起應用時,它們使得乙個程式設計師開發乙個容易進行軟體維護和擴充套件的系統變得更加可能。

solid所包含的原則是通過引發程式設計者進行軟體源**的**重構進行軟體的**異味清掃,從而使得軟體清晰可讀以及可擴充套件時可以應用的指南。solid被典型的應用在測試驅動開發上,並且是敏捷開發以及自適應軟體開發的基本原則的重要組成部分。

1、單一原則(single responsibility principle):乙個類或者乙個方法只負責一項職責,盡量做到類的只有乙個行為原因引起變化;

單一職責原則(single responsibility principle,srp)規定,每個軟體單元,包括元件、類和函式,應該只有乙個單一且明確定義的職責(改變的原因),即每個類都應該有乙個單一的功能,並且該功能應該由這個類完全封裝起來。所有這個類的服務都應該嚴密的和該功能平行(功能平行,意味著沒有依賴)。

class

rectangle

int width

double

area()

void

draw

(form form)

}

rectangle類的設計就違反了單一職責原則,該類包含了矩形資料結構,也包含了矩陣的繪製方法,兩種概念的耦合會產生不少負面影響,比如使用計算面積時不得不包含gui庫的引用,增加了編譯鏈結時間。

按照srp的指導思想,應該將rectangle類分拆為兩個行為單一且明確定義的類。

class

geometricrectangle

int width

double

area()

}class

rectangle

}

2、黎克特制替換原則(lsp liskov substitution principle):子類可以擴充套件父類的功能,但不能改變原有父類的功能;(本質其實就是c++的多型)

(目的:增強程式的健壯性)實際專案中,每個子類對應不同的業務含義,使父類作為引數,傳遞不同的子類完成不同的業務邏輯。

1.子類必須實現父類的抽象方法,但不得重寫(覆蓋)父類的非抽象(已實現)方法。

2.子類中可以增加自己特有的方法。

3.當子類覆蓋或實現父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入引數更寬鬆。

4.當子類的方法實現父類的抽象方法時,方法的後置條件(即方法的返回值)要比父類更嚴格。

3、依賴倒置原則(dependence inversion principle):面向介面程式設計;(通過介面作為引數實現應用場景)

抽象就是介面或者抽象類,細節就是實現類

含義:上層模組不應該依賴下層模組,兩者應依賴其抽象;

抽象不應該依賴細節,細節應該依賴抽象;

通俗點就是說變數或者傳引數,盡量使用抽象類,或者介面;

【介面負責定義public屬性和方法,並且申明與其他物件依賴關係,抽象類負責公共構造部分的實現,實現類準確的實現業務邏輯】

4、介面隔離(inte***ce segregation principle):建立單一介面;(擴充套件為類也是一種介面,一切皆介面)

定義:a.客戶端不應該依賴它不需要的介面;

b.類之間依賴關係應該建立在最小的介面上;

簡單理解:複雜的介面,根據業務拆分成多個簡單介面;(對於有些業務的拆分多看看介面卡的應用)

【介面的設計粒度越小,系統越靈活,但是靈活的同時結構複雜性提高,開發難度也會變大,維護性降低】

5、迪公尺特原則(law of demeter lod):最少知道原則,盡量降低類與類之間的耦合;

乙個物件應該對其他物件有最少的了解

為了解釋迪公尺特法則,我們通過**進行解釋。根據本單一職責原則,我們將汽車分為了許多功能明確的類別,driver物件的drive函式實現如下,並給出了依賴關係圖。

class

driver

// ...

};

6、開閉原則(open closed principle):用抽象構建架構,用實現擴充套件原則

開閉原則(open closed principle, ocp)指出軟體實體(模組、類、函式等)對擴充套件應該是開放的,對修改應該是封閉的。ocp是構建可維護性和可重用性**的基礎。它強調設計良好的**可以不通過修改而擴充套件,新的功能通過新增新的**來實現,而不需要更改已有的可工作的**。抽象(abstraction)和多型(polymorphism)是實現這一原則的主要機制,而繼承(inheritance)則是實現抽象和多型的主要方法。

部分內容來自:

設計模式六大原則

0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...

設計模式六大原則

0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...

設計模式六大原則

參考文章 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領域中的相應職責,或者可以定義為 就乙個類而言,應該只有乙個引起它變化的原因。開閉原則 open closed principle,ocp 乙個軟體實體應當對擴充套件開放,對修改關閉。...