1. 程式人生 > 其它 >JAVA設計模式-設計七大原則

JAVA設計模式-設計七大原則

JAVA 設計模式

設計模式的重要性

  • 軟體工程中,設計模式是對軟體設計中普遍存在的(反覆出現)的各種問題,所提出的解決方案。

設計模式要解決的問題

  • 程式碼重用性(相同的程式碼,不需要多次編寫)
  • 可讀性(程式設計規範性,便於其他程式設計師的閱讀和理解)
  • 可擴充套件性(需要增加新功能時,非常方便,稱為可維護性)
  • 可靠性( 當我們增加一個新的功能之後,對原來的功能沒有影響)
  • 是程式呈現高內聚,低耦合(模組內部很緊密,模組之間依賴性很低)

設計模式七大原則

  • 單一職責原則
  • 介面隔離原則
  • 依賴倒置原則
  • 里氏替換原則
  • 開閉原則
  • 狄敏特原則
  • 合成複用原則

單一職責原則

​ 對類來說的,即一個類應該只負責一項職責;如類A負責兩個不同職責:職責1,職責2.當職責1需求變更而改變A時,有可能會造成職責2執行錯誤,所以需要將類A的粒度分解為A1

A2

注意事項和細節

  1. 降低類的複雜度,一個類只負責一項職責
  2. 提高類的可讀性和可維護性
  3. 降低變更引起的風險
  4. 通常情況下,我們應當遵守單一職責原則,只有邏輯足夠簡單,才可以在程式碼級違反單一職責原則;只有類中方法數量足夠少,可以在方法級別保持單一職責原則。

介面隔離原則

​ 客戶端不應該依賴它不需要的介面,即一個類對另一個類的依賴應該建立在最小的介面上;使用多個專門的介面,要比單一使用總的介面好

注意事項和細節:

  1. 一個類對實現一個介面,儘量保證其所有實現介面都是他需要的。
  2. 適當情況下需要對介面進行拆分,讓其實現類不要有多餘的實現。

依賴倒置原則

​ 要依賴於抽象,而不是具體的實現;針對介面程式設計,而不是針對實現程式設計。設計理念:相對於細節的多變性,抽象的東西要穩定的多。以抽象為基礎搭建的架構比以細節為基礎結構的架構要穩定的多。

注意事項和細節:

  1. 高層模組不應該依賴底層模組,二者應該依賴抽象
  2. 抽象不應該依賴細節,細節應該依賴抽象
  3. 依賴倒置的思想就是面向介面程式設計
  4. 使用介面或者抽象類的目的是制定好規範,而不涉及任何具體操作,把展現細節的任務交給他們的實現類去完成。

開放-封閉原則

​ 對擴充套件開放,對修改封閉;當軟體需要變化時,儘量通過擴充套件軟體實體行為來實現變化的,而不是通過修改已有的程式碼來實現變化

注意事項和細節:

  1. 對擴充套件開放、對修改封閉;例如實體類封裝。

里氏替換原則

​ 子類可以替換父類。

注意事項和細節:

  1. 繼承包含這樣一層含義:父類中凡是已經實現好的方法,實際上是在設定規範和契約,雖然它不強制要求所有的子類必須遵循這些契約,但是如果子類對這些已經實現的方法任意修改,就會對整個繼承體系造成破壞。
  2. 繼承在給程式設計帶來便利的同時,也帶來了弊端。比如使用繼承會給程式帶來侵入性,程式的可移植性降低,增加物件間的耦合性,如果一個類被其他的類所繼承,則當這個類需要修改時,必須考慮到所有的子類,並且父類修改後,所有涉及到子類的功能都有可能產生故障。
  3. 在使用繼承時,遵循里氏替換原則,在子類中儘量不要重寫父類的方法
  4. 里氏替換原則告訴我們,繼承實際上讓兩個類耦合性增強了,在適當的情況下,可以通過聚合,組合,依賴來解決問題。

狄米特法則

​ 最少知識原則;一個物件應當對其他物件有儘可能的瞭解

注意事項和細節:

  1. 又叫最少知道原則,即一個類對自己依賴的類知道的越少越好。也就是說,對於被依賴的類不管多少複雜,都儘量將邏輯封裝在類的內部。對外除了提供的public 方法,不對外洩露任何資訊
  2. 迪米特法則還有個更簡單的定義:只與直接的朋友通訊
  3. 直接的朋友:每個物件都會與其他物件有耦合關係,只要兩個物件之間有耦合關係,我們就說這兩個物件之間是朋友關係。耦合的方式很多,依賴,關聯,組合,聚合等。其中,我們稱出現成員變數,方法引數,方法返回值中的類為直接的朋友,而出現在區域性變數中的類不是直接的朋友。也就是說,陌生的類不要以區域性變數的形式出現在類的內部。

組合重用原則

​ 要儘量的使用組合、而不是繼承關係來達到重用的目的。

注意事項和細節

  1. 找出應用中可能需要的變化之處,把它們獨立出來,不要和那些不需要變化的程式碼混在一起。
  2. 針對介面程式設計,而不是針對實現程式設計
  3. 為了互動物件之間耦合設計而努力