設計模式 六大設計原則

2022-08-05 07:27:12 字數 1665 閱讀 1241

solid:

s:單一職責原則

o:開放封閉原則

l:黎克特制代換原則

i:介面隔離原則

d:依賴倒轉原則

故事:手機拍攝ufo

定義:就乙個類而言,應該僅有乙個引起它變化的原因。

通俗講就是我們不要讓乙個類承擔過多的職責。如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭受到破壞。

故事:考研求職兩不誤

定義:軟體實體(類,模組,函式等等)應該可以擴充套件,但是不能修改。

開放封閉有兩個含義,乙個是對於拓展是開放的,另乙個是對於修改是封閉的。對於開發來說需求肯定是要變化的,但是新需求一來,我們就要把類重新改一遍這顯然是令人頭疼的,所以我們設計程式時面對需求的改變要盡可能的保證相對的穩定,盡量用新**實現拓展來修改需求,而不是通過修改原有的**來實現。 

定義:子型別必須能夠替換掉它們的父型別。

黎克特制代換原則告訴我們,在軟體中將乙個基類物件替換成它的子類物件,程式將不會產生任何錯誤和異常,反過來則不成立,如果乙個軟體實體使用的是乙個子類物件的話,那麼它不一定能夠使用基類物件。 

黎克特制代換原則是實現開閉原則的重要方式之一,由於使用基類物件的地方都可以使用子類物件,因此在程式中盡量使用基類型別來對物件進行定義,而在執行時再確定其子類型別,用子類物件來替換父類物件。 

在使用黎克特制代換原則時需要注意如下幾個問題:

定義:乙個類對另乙個類的依賴應該建立在最小的介面上。 

建立單一介面,不要建立龐大臃腫的介面,盡量細化介面,介面中的方法盡量少。也就是說,我們要為各個類建立專用的介面,而不要試圖去建立乙個很龐大的介面供所有依賴它的類去呼叫。 

採用介面隔離原則對介面進行約束時,要注意以下幾點:

故事:會修電腦不會修收音機?

定義:高層模組不應該依賴低層模組,兩個都應該依賴抽象。抽象不應該依賴於細節,細節應該依賴於抽象。

依賴倒轉其實可以說是物件導向設計的標誌,用哪種設計語言來編寫程式不重要,如果編寫時考慮的都是如何針對抽象程式設計而不是針對細節程式設計,即程式中所有的依賴關係都是終止於抽象類或者介面,那就是物件導向設計,反之那就是過程化設計了。

故事:無熟人難辦事?

定義:如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某個方法的話,可以通過第三者**這個呼叫。

也稱為最少知識原則。如果乙個系統符合迪公尺特法則,那麼當其中某乙個模組發生修改時,就會盡量少地影響其他模組,擴充套件會相對容易,這是對軟體實體之間通訊的限制,迪公尺特法則要求限制軟體實體之間通訊的寬度和深度。迪公尺特法則可降低系統的耦合度,使類與類之間保持鬆散的耦合關係。 

迪公尺特法則要求我們在設計系統時,應該儘量減少物件之間的互動,如果兩個物件之間不必彼此直接通訊,那麼這兩個物件就不應當發生任何直接的相互作用,如果其中的乙個物件需要呼叫另乙個物件的某乙個方法的話,可以通過第三者**這個呼叫。簡言之,就是通過引入乙個合理的第三者來降低現有物件之間的耦合度。 

在將迪公尺特法則運用到系統設計中時,要注意下面的幾點:在類的劃分上,應當盡量建立松耦合的類,類之間的耦合度越低,就越有利於復用,乙個處在松耦合中的類一旦被修改,不會對關聯的類造成太大波及;在類的結構設計上,每乙個類都應當盡量降低其成員變數和成員函式的訪問許可權;在類的設計上,只要有可能,乙個型別應當設計成不變類;在對其他類的引用上,乙個物件對其他物件的引用應當降到最低。

設計模式 六大設計原則

剛剛結束設計模式學習時,感覺哪哪的抓不住重點,雖然之前師傅給勾了寫比較重要的設計模式,但是給我的感覺設計模式怎麼全都乙個樣子。通過對一些文章的瀏覽,簡單的對設計原則總結了一下。設計模式,就是設計範例。是經典問題的解決方案,是可以讓學習者舉一反三的,有研究價值 有交流價值的例子。設計模式的本質是物件導...

設計模式的六大設計原則

1 單一指責原則 single responsibility principle,srp 每個類的功能單一,不能多功能 2 黎克特制替換原則 liskov substitution principle lsp,lsp 1.子類必須完全實現父類的方法 2.子類可以有自己的個性 3.覆蓋或實現父類的方法...

設計模式 六大設計原則總結

六大設計原則 solid 包括 單一職責原則,黎克特制替換原則,依賴倒置原則,介面隔離原則,迪公尺特法則,開閉原則。設計模式的乙個重點是面向介面程式設計,設計具有低耦合度的模組,使各個模組功能分明。在六大設計原則中,很多方面都體現了這些內容。在程式設計時,遵循這些點可以使 更容易讀和擴充套件,使 易...