Java設計模式2之七大設計模式
阿新 • • 發佈:2018-11-06
一.開閉原則
- 一個軟體實體如類,模組和函式應該對拓展開放,對修改關閉。
- 用抽象構建框架,用實現拓展細節。
- 優點:提高軟體系統的可複用性和可維護性。
- 為了滿足開閉原則,需要對系統進行抽象化設計,抽象化是開閉原則的關鍵。在Java、C#等程式語言中,可以為系統定義一個相對穩定的抽象層,而將不同的實現行為移至具體的實現層中完成。在很多面向物件程式語言中都提供了介面、抽象類等機制,可以通過它們定義系統的抽象層,再通過具體類來進行擴充套件。如果需要修改系統的行為,無須對抽象層進行任何改動,只需要增加新的具體類來實現新的業務功能即可,實現在不修改已有程式碼的基礎上擴充套件系統的功能,達到開閉原則的要求。
初始:
重構後:
二.依賴倒置原則
- 高層模組不應該依賴低層模組,二者都應該依賴其抽象
- 抽象不應該依賴細節,細節應該依賴抽象
- 針對介面程式設計,不要針對實現程式設計
- 依賴倒置原則要求我們在程式程式碼中傳遞引數時或在關聯關係中,儘量引用層次高的抽象層類,即使用介面和抽象類進行變數型別宣告、引數型別宣告、方法返回型別宣告,以及資料型別的轉換等,而不要用具體類來做這些事情。為了確保該原則的應用,一個具體類應當只實現介面或抽象類中宣告過的方法,而不要給出多餘的方法,否則將無法呼叫到在子類中增加的新方法。
- 優點:可以減少類間的耦合性,提高系統穩定性,提高程式碼可讀和可維護性,可降低修改程式所造成的風險。
初始:
重構後:
三.單一職責原則
- 不要存在多於一個導致類變更的原因
- 一個類/介面/方法只負責一項職責
- 優點:降低類的複雜度,提高類的可讀性,提高系統的可維護性,降低變更引起的風險。
四.介面隔離原則
- 用多個專門的介面,而不使用單一的總介面,客戶端不應該依賴它不需要的介面。
- 一個類對一個類的依賴應該建立在最小的介面上。
- 建立單一介面,不要建立龐大臃腫的介面。
- 儘量細化介面,介面中的方法儘量少。
五.迪米特法則
- 迪米特法則又叫作最少知識原則(Least Knowledge Principle,簡寫 LKP),就是說一個物件應當對其他物件有儘可能少的瞭解,不和陌生人說話。
- 儘量降低類與類之間的耦合。
- 優點:降低類之間的耦合。
六.合成/聚合複用原則
- 合成/聚合複用原則經常又叫做合成複用原則,就是在一個新的物件裡面使用一些已有的物件,使之成為新物件的一部分,新的物件通過這些物件的委派達到複用已有功能的目的。他的設計原則是:要儘量使用合成/聚合,儘量不要使用繼承。
- 儘量使用物件組合,而不是通過繼承來達到複用的目的。
七.里氏替換原則
- 在軟體中將一個基類物件替換成它的子類物件,程式將不會產生任何錯誤和異常,反過來則不成立,如果一個軟體實體使用的是一個子類物件的話,那麼它不一定能夠使用基類物件。
- 例如:我喜歡動物,那我一定喜歡狗,因為狗是動物的子類;但是我喜歡狗,不能據此斷定我喜歡動物,因為我並不喜歡老鼠,雖然它也是動物。
- 里氏代換原則是實現開閉原則的重要方式之一,由於使用基類物件的地方都可以使用子類物件,因此在程式中儘量使用基類型別來對物件進行定義,而在執行時再確定其子類型別,用子類物件來替換父類物件。