1. 程式人生 > >Java設計模式2之七大設計模式

Java設計模式2之七大設計模式

一.開閉原則

  • 一個軟體實體如類,模組和函式應該對拓展開放,對修改關閉。
  • 用抽象構建框架,用實現拓展細節。
  • 優點:提高軟體系統的可複用性和可維護性。
  • 為了滿足開閉原則,需要對系統進行抽象化設計,抽象化是開閉原則的關鍵。在Java、C#等程式語言中,可以為系統定義一個相對穩定的抽象層,而將不同的實現行為移至具體的實現層中完成。在很多面向物件程式語言中都提供了介面、抽象類等機制,可以通過它們定義系統的抽象層,再通過具體類來進行擴充套件。如果需要修改系統的行為,無須對抽象層進行任何改動,只需要增加新的具體類來實現新的業務功能即可,實現在不修改已有程式碼的基礎上擴充套件系統的功能,達到開閉原則的要求。

初始:

image

重構後:

image

二.依賴倒置原則

  • 高層模組不應該依賴低層模組,二者都應該依賴其抽象
  • 抽象不應該依賴細節,細節應該依賴抽象
  • 針對介面程式設計,不要針對實現程式設計
  • 依賴倒置原則要求我們在程式程式碼中傳遞引數時或在關聯關係中,儘量引用層次高的抽象層類,即使用介面和抽象類進行變數型別宣告、引數型別宣告、方法返回型別宣告,以及資料型別的轉換等,而不要用具體類來做這些事情。為了確保該原則的應用,一個具體類應當只實現介面或抽象類中宣告過的方法,而不要給出多餘的方法,否則將無法呼叫到在子類中增加的新方法。
  • 優點:可以減少類間的耦合性,提高系統穩定性,提高程式碼可讀和可維護性,可降低修改程式所造成的風險。

初始:

image

重構後:

image

三.單一職責原則

  • 不要存在多於一個導致類變更的原因
  • 一個類/介面/方法只負責一項職責
  • 優點:降低類的複雜度,提高類的可讀性,提高系統的可維護性,降低變更引起的風險。

四.介面隔離原則

  • 用多個專門的介面,而不使用單一的總介面,客戶端不應該依賴它不需要的介面。
  • 一個類對一個類的依賴應該建立在最小的介面上。
  • 建立單一介面,不要建立龐大臃腫的介面。
  • 儘量細化介面,介面中的方法儘量少。

五.迪米特法則

  • 迪米特法則又叫作最少知識原則(Least Knowledge Principle,簡寫 LKP),就是說一個物件應當對其他物件有儘可能少的瞭解,不和陌生人說話。
  • 儘量降低類與類之間的耦合。
  • 優點:降低類之間的耦合。

六.合成/聚合複用原則

  • 合成/聚合複用原則經常又叫做合成複用原則,就是在一個新的物件裡面使用一些已有的物件,使之成為新物件的一部分,新的物件通過這些物件的委派達到複用已有功能的目的。他的設計原則是:要儘量使用合成/聚合,儘量不要使用繼承。
  • 儘量使用物件組合,而不是通過繼承來達到複用的目的。

七.里氏替換原則

  • 在軟體中將一個基類物件替換成它的子類物件,程式將不會產生任何錯誤和異常,反過來則不成立,如果一個軟體實體使用的是一個子類物件的話,那麼它不一定能夠使用基類物件。
  • 例如:我喜歡動物,那我一定喜歡狗,因為狗是動物的子類;但是我喜歡狗,不能據此斷定我喜歡動物,因為我並不喜歡老鼠,雖然它也是動物。
  • 里氏代換原則是實現開閉原則的重要方式之一,由於使用基類物件的地方都可以使用子類物件,因此在程式中儘量使用基類型別來對物件進行定義,而在執行時再確定其子類型別,用子類物件來替換父類物件。