設計模式的六大原則 理論知識

2021-09-07 16:59:51 字數 2283 閱讀 2217

1. 單一職責原則(srp)(single responsibility principle)

2. 黎克特制替換原則(lsp)(liskov substitution principle)

3. 依賴倒置原則(dip)(dependence inversion principle)

4. 介面隔離原則(isp)(inte***ce segregation principle)

5. 迪公尺特原則(lod)(law of demeter)

6. 開閉原則(ocp)(open closed principle)

1:單一職責原則(乙個類只做一件事)

應用場景:

類t負責兩個不同的職責:p1職責,p2職責。當p1需求發生變法時而需要修改類t時,就有可能導致原本執行正常的p2發生故障。

遵循單一原則,把p1跟p2分成兩個類,每個類只關注一件事情避免因為需求的修改而引發不必要的故障

什麼情況下可以違背單一職責原則:

只要邏輯足夠簡單,就可以在方法級別上違背單一職責原則

如果乙個類足夠簡單,方法夠少,就可以在類級別上違背單一職責原則

雜話:各種級別(方法/類/介面/類庫/專案/系統)

優點:

1 類邏輯變得簡單

2 **穩定,可擴充套件性高

缺點:

1 **會變多

2:黎克特制替換原則(任何使用基類的地方,其子類都可以透明的使用(繼承,多型))

如果子類不能擁有父類的全部屬性和行為,斷掉繼承

如果子類要修改父類的行為,使用override/virtual

總結來說,黎克特制替換原則就是規範了繼承的使用

3:依賴倒置原則(上層模組不直接依賴下層模組,二者應通過抽象依賴(抽象類/介面類))

依賴抽象(抽象類/介面類),而不是依賴細節(實現類)

相對於細節,依賴抽象更穩定

基於抽象的架構,更穩定

雜談:經常聽到的幾個詞

1 控制反轉(ioc):把依賴交給第三方容器來完成  (目的)

2 依賴注入(di):實現控制反轉的一種手段  (行為)

4:介面隔離原則(客戶端不應該依賴於它不需要的介面,乙個類對另乙個類的的依賴應該建立在最小的介面上)

不要使用大而全的介面,這樣導致實現不需要的方法

也不能拆分的太細,這樣會導致使用不便

關於介面隔離原則,具體情況還需要根據業務需求來定,沒有乙個同一標準,該拆該合,都得需要自己度量

5:迪公尺特法則(最少知道原則)(乙個物件只於關係最密切的朋友進行通訊,高內聚,低耦合)

類於類之間,要避免不必要的依賴

學校,老師,班級,學生四個類

學校只與老師通訊,老師只跟班級通訊,不要學校在關聯老師的同時,又關聯班級,這樣會增加依賴、

場景:老師類中有乙個班級的集合,班級類中有乙個學生的集合

錯誤做法:在老師類中寫乙個方法,遍歷出所有班級,在遍歷中,又根據班級遍歷出所有學生(這種寫法雖然很爽,但是增加了不必要的依賴)

正確做法:在老師類中寫乙個方法,在班級類中寫乙個方法,老師類中遍歷出所有班級,在遍歷中在根據班級呼叫班級類中自身的方法獲取所有的學生(減少了不必要的依賴)

雜談:類與類的關係

縱向關係:繼承  實現

橫向關係:依賴(方法內部)  關聯 組合 聚合(後三個:方法返回/引數  屬性)

6:開閉原則(開放擴充套件,關閉修改)

沒有任何的指導意義,只能算是乙個願景,架構的最理想狀態

其他五個原則,都是為了輔助開閉原則,從而達到真正的理想狀態

總結

1:六大原則並不是指具體的技術或者應用,而是乙個指導性的原則,如何遵循六大原則需要自己度量,相當於乙個建議,並不一定必須遵守六大原則,根據業務需求,自己做取捨

2:真正的業務需求中,往往會出現遵循了這個原則,卻違反了另乙個原則,具體側重哪個原則,還要根據業務需求來定,不要盲目的追求。

3:盡可能的遵循六大原則來寫**,使你的應用變得健壯,擴充套件性高,易維護。

出處:

設計模式六大原則

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

設計模式六大原則

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

設計模式六大原則

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