JAVA設計模式-設計七大原則
阿新 • • 發佈:2021-11-13
JAVA 設計模式
設計模式的重要性
- 軟體工程中,設計模式是對軟體設計中普遍存在的(反覆出現)的各種問題,所提出的解決方案。
設計模式要解決的問題
- 程式碼重用性(相同的程式碼,不需要多次編寫)
- 可讀性(程式設計規範性,便於其他程式設計師的閱讀和理解)
- 可擴充套件性(需要增加新功能時,非常方便,稱為可維護性)
- 可靠性( 當我們增加一個新的功能之後,對原來的功能沒有影響)
- 是程式呈現高內聚,低耦合(模組內部很緊密,模組之間依賴性很低)
設計模式七大原則
- 單一職責原則
- 介面隔離原則
- 依賴倒置原則
- 里氏替換原則
- 開閉原則
- 狄敏特原則
- 合成複用原則
單一職責原則
對類來說的,即一個類應該只負責一項職責;如類A負責兩個不同職責:職責1,職責2.當職責1需求變更而改變A時,有可能會造成職責2執行錯誤,所以需要將類A的粒度分解為
A1
,A2
注意事項和細節
- 降低類的複雜度,一個類只負責一項職責
- 提高類的可讀性和可維護性
- 降低變更引起的風險
- 通常情況下,我們應當遵守單一職責原則,只有邏輯足夠簡單,才可以在程式碼級違反單一職責原則;只有類中方法數量足夠少,可以在方法級別保持單一職責原則。
介面隔離原則
客戶端不應該依賴它不需要的介面,即一個類對另一個類的依賴應該建立在最小的介面上;使用多個專門的介面,要比單一使用總的介面好
注意事項和細節:
- 一個類對實現一個介面,儘量保證其所有實現介面都是他需要的。
- 適當情況下需要對介面進行拆分,讓其實現類不要有多餘的實現。
依賴倒置原則
要依賴於抽象,而不是具體的實現;針對介面程式設計,而不是針對實現程式設計。設計理念:相對於細節的多變性,抽象的東西要穩定的多。以抽象為基礎搭建的架構比以細節為基礎結構的架構要穩定的多。
注意事項和細節:
- 高層模組不應該依賴底層模組,二者應該依賴抽象
- 抽象不應該依賴細節,細節應該依賴抽象
- 依賴倒置的思想就是面向介面程式設計
- 使用介面或者抽象類的目的是制定好規範,而不涉及任何具體操作,把展現細節的任務交給他們的實現類去完成。
開放-封閉原則
對擴充套件開放,對修改封閉;當軟體需要變化時,儘量通過擴充套件軟體實體行為來實現變化的,而不是通過修改已有的程式碼來實現變化
注意事項和細節:
- 對擴充套件開放、對修改封閉;例如實體類封裝。
里氏替換原則
子類可以替換父類。
注意事項和細節:
- 繼承包含這樣一層含義:父類中凡是已經實現好的方法,實際上是在設定規範和契約,雖然它不強制要求所有的子類必須遵循這些契約,但是如果子類對這些已經實現的方法任意修改,就會對整個繼承體系造成破壞。
- 繼承在給程式設計帶來便利的同時,也帶來了弊端。比如使用繼承會給程式帶來侵入性,程式的可移植性降低,增加物件間的耦合性,如果一個類被其他的類所繼承,則當這個類需要修改時,必須考慮到所有的子類,並且父類修改後,所有涉及到子類的功能都有可能產生故障。
- 在使用繼承時,遵循里氏替換原則,在子類中儘量不要重寫父類的方法。
- 里氏替換原則告訴我們,繼承實際上讓兩個類耦合性增強了,在適當的情況下,可以通過聚合,組合,依賴來解決問題。
狄米特法則
最少知識原則;一個物件應當對其他物件有儘可能的瞭解
注意事項和細節:
- 又叫最少知道原則,即一個類對自己依賴的類知道的越少越好。也就是說,對於被依賴的類不管多少複雜,都儘量將邏輯封裝在類的內部。對外除了提供的public 方法,不對外洩露任何資訊
- 迪米特法則還有個更簡單的定義:只與直接的朋友通訊
- 直接的朋友:每個物件都會與其他物件有耦合關係,只要兩個物件之間有耦合關係,我們就說這兩個物件之間是朋友關係。耦合的方式很多,依賴,關聯,組合,聚合等。其中,我們稱出現成員變數,方法引數,方法返回值中的類為直接的朋友,而出現在區域性變數中的類不是直接的朋友。也就是說,陌生的類不要以區域性變數的形式出現在類的內部。
組合重用原則
要儘量的使用組合、而不是繼承關係來達到重用的目的。
注意事項和細節
- 找出應用中可能需要的變化之處,把它們獨立出來,不要和那些不需要變化的程式碼混在一起。
- 針對介面程式設計,而不是針對實現程式設計
- 為了互動物件之間耦合設計而努力