設計模式(一) 設計原則

2021-08-19 07:57:58 字數 1790 閱讀 7743

此系列只是對《大話設計模式》的鞏固總結。

在理解設計模式之前,需要理解幾個:物件導向的設計原則

單一職責:乙個類只專注於做一件事。

黎克特制替換:基類存在的地方,子類可以將其替換。

依賴倒置:實現盡量依賴抽象,不依賴具體實現。

介面隔離:為使用者提供盡可能小的的單獨介面,而不是大而全。

迪公尺特法則: 乙個實體盡可能少的與其他實體發生相互作用。

開閉原則:面向擴充套件開放、面向修改關閉。

組合/聚合:盡量使用組合聚合達到復用的目的, 盡量少用繼承。

理解:個人理解,眾多設計原則與設計模式的基礎是對需要實現目標合理抽象及分類。合理的選擇和使用設計模式,前提是對自己需要實現的東西合理的抽象,並且準確的分類。加上對一種程式語言的熟練運用,可創作出比較美觀的**。

單一職責:乙個類只負責一項職責,這裡的關鍵是對職責的描述。如果對職責描述是細化還是一定概括性,這就一定程度的取決專案需求了。過於細化將會產生大量的類,如果公司沒有好的文件管理策略+較好統一的程式設計風格+熟練的程式設計人員 , 結果是生產的細而全的類並不一定好用。如果純粹站在**層面來看,遵守單一原則,對於後續**擴充套件,維護有很多好處的。但死磕這兒,可能在設計階段,導致過度設計。需要設計人員,對公司的業務方向、專案方向有較好的理解,準確把握職責劃分。

黎克特制替換:軟體中基類物件替換為子類物件,程式不會出現異常。(大牛總結)這裡強調的思想:子類可以擴充套件父類的功能,但不能改變父類原有的功能

依賴倒置:高層模組不應該依賴底層模組,二者都應該依賴抽象;抽象不依賴細節;細節應該依賴抽象。

反應到**中,乙個高層類強耦合了乙個底層類,--依賴倒置原則--,這裡介紹的很清晰。思想:面向介面程式設計,參與協作開發的人越多、專案越龐大,採用依賴導致原則的意義就越重大。現在很流行的tdd開發模式就是依賴倒置原則最成功的應用。

介面隔離原則:過多的類不應依賴乙個大而多介面。將大而多的介面拆分,按需實現。

迪公尺特法則:只與直接的朋友通訊。

首先來解釋一下什麼是直接的朋友:每個物件都會與其他物件有耦合關係,只要兩個物件之間有耦合關係,我們就說這兩個物件之間是朋友關係。耦合的方式很多,依賴、關聯、組合、聚合等。其中,我們稱出現成員變數、方法引數、方法返回值中的類為

直接的朋友

,而出現在區域性變數中的類則不是直接的朋友。也就是說,陌生的類最好不要作為區域性變數的形式出現在類的內部。你和女盆友就是直接盆友,和她閨蜜就不是,有什麼事,直接和她講,不要直接找她閨蜜(捂臉)。

開閉原則:修改封閉、擴充套件開放。這裡和依賴倒置有一些相似之處,對於會有變化的地方進行抽象化,用實現擴充套件細節。這樣對於修改某乙個實現的細節,並不影響其他。而對於需要新增擴充套件的功能,新增抽象的實現即可。開閉應該是軟體設計的最終原則,無論是類,還是模組。

最後說明一下如何去遵守這六個原則。對這六個原則的遵守並不是是和否的問題,而是多和少的問題,也就是說,我們一般不會說有沒有遵守,而是說遵守程度的多少。任何事都是過猶不及,設計模式的六個設計原則也是一樣,制定這六個原則的目的並不是要我們刻板的遵守他們,而需要根據實際情況靈活運用。對他們的遵守程度只要在乙個合理的範圍內,就算是良好的設計。我們用一幅圖來說明一下。

圖中的每一條維度各代表一項原則,我們依據對這項原則的遵守程度在維度上畫乙個點,則如果對這項原則遵守的合理的話,這個點應該落在紅色的同心圓內部;如果遵守的差,點將會在小圓內部;如果過度遵守,點將會落在大圓外部。乙個良好的設計體現在圖中,應該是六個頂點都在同心圓中的六邊形。

在上圖中,設計1、設計2屬於良好的設計,他們對六項原則的遵守程度都在合理的範圍內;設計3、設計4設計雖然有些不足,但也基本可以接受;設計5則嚴重不足,對各項原則都沒有很好的遵守;而設計6則遵守過渡了,設計5和設計6都是迫切需要重構的設計。

設計模式筆記(一) 設計原則

類 物件之間的關係 generalization 泛化 dependency 依賴 association 關聯 aggregation 聚合 composition 組合 合成 泛化 表示類之間是is a關係,如類a繼承了b類或實現了b介面,子類會繼承父類的屬性和方法。依賴 表示類之間是use a...

設計模式 設計模式原則

1 單一職責原則 srp 乙個類應當只有乙個引起其變化的原因。使用單一職責原則的好處有 1 類的複雜性降低 2 可讀性提高 3 可維護性提高 4 變更引起的風險降低 2 黎克特制替換原則 lsp 在使用父類的地方,可以使用其子類替換。黎克特制替換原則的含義 1 子類必須完全實現父類的方法 2 子類可...

設計模式 設計原則

1.單一職責原則 single responsibility principle,簡稱srp 就乙個類而言,應該僅有乙個引起它變化的原因。如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭受到...