如何同時提高一個軟體系統的可維護性和可復用性是面向物件的設計要解決的核心問題,而通過學習和應用設計模式,可以更加深入地理解面向物件地設計理念,從而幫助設計師改善自己的系統設計,
設計模式的目的
設計模式是為了讓程式具有更好的:
- 代碼重用性(相同功能的代碼,不用多次撰寫)
- 可讀性(編程規范性,便于其他程式員的閱讀和理解)
- 可擴展性(當需要增加新的功能時,非常的方便)
- 可靠性(當增加新的功能后,對原來的功能沒有影響)
- 使程式呈現高內聚,低耦合的特性
七大設計原則
-
開閉原則原則:一個軟體物體如類,模塊和函式應該對擴展開放,對修改關閉,用抽象架構框架,用實作擴展細節,當軟體需要變化時,盡量通過擴展軟體物體地行為來實作變化,而不是通過修改已有地代碼來實作變化,其他的設計原則都是開閉原則的手段和工具,是依附于開閉原則的,
-
單一職責原則:即一個類應該只負責一項職責
注意事項和細節:
- 降低類的復雜度,一個類只負責一項職責
- 提高類的可讀性,可維護性
- 降低變更引起的風險
- 只有邏輯足夠簡單,才可以在代碼級違反單一職責原則;只有類中的方法數量足夠少,才可以在方法級別保持單一職責原則
-
介面隔離原則:客戶端不應該依賴他不需要的介面,即一個類對另一個類的依賴應該建立在最小的介面上
-
依賴倒轉原則:
1.高層模塊不應該依賴底層模塊,二者都應該依賴抽象;
2.抽象不應該依賴細節,細節應該依賴抽象;
3.依賴倒轉的中心思想是面向介面編程;
4.依賴倒轉原則是基于這樣的設計理念:相對于細節的多變性,抽象的東西要穩定的多,以抽象為基礎搭建的架構比以細節為基礎的架構要穩定的多,在java中,抽象指的是介面或抽象類,細節就是具體的實作類
5.使用介面或者抽象類的目的是制定好規范,而不是設計任何具體的操作,把展現細節的任務交給他們的實作類去完成
依賴倒轉的三種方式:
- 介面傳遞
- 構造方法傳遞
- setter方式傳遞
注意事項和細節:
- 底層模塊盡量都要有抽象類或介面,或者兩者都有,程式穩定性更好
- 變數的宣告型別盡量是抽象類和介面,這樣我們的變數參考和實際物件間,就存在一個緩沖層,利于程式擴展和優化
- 繼承時要遵循里氏替換原則
-
里氏替換原則:所有參考基類的地方必須能夠透明地使用其子類地物件,在使用繼承時,遵循里氏替換原則,在子類中盡量不要重寫父類的方法,在適當的情況下,可以通過聚合,組合,依賴來解決問題
-
迪米特法則:最少知道原則,即一個類對自己依賴地類知道地越少越好,也就是說,對于被依賴地類不管多么負責,都盡量將邏輯封裝在類的內部,對外出來提供地public方法,不對外泄露任何資訊,
注意事項和細節:
- 迪米特法則的核心是降低類之間的耦合
- 由于每個類都減少了不必要的依賴,因此迪米特法則只是要求降低類之間的耦合關系,并不是要求完全沒有依賴關系
-
合成復用原則:盡量使用合成、聚合的方式,而不是使用繼承
設計模式的核心思想
- 找出應用中可能需要變化之處,把他們獨立出來,不要和那些不需要變化的代碼混在一起
- 針對介面編程,而不是針對實作編程
- 為了互動物件之間的松耦合設計而努力
設計模式的型別
- 創建型模式:單例模式、抽象工廠模式、原型模式、建造者模式、工廠模式
- 結構型模式:配接器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式
- 行為型模式:模板方法模式、命令模式、訪問者模式、迭代器模式、觀察者模式中介者模式、備忘錄模式、解釋器模式、狀態模式、策略模式、責任鏈模式
設計模式分類講解
- 工廠模式
- 單例模式
參考文章:
B站尚硅谷Java設計模式(圖解+框架原始碼剖析):https://www.bilibili.com/video/BV1G4411c7N4
閻宏編著的《java與模式》
本文著作權歸Charon和博客園共有,原創文章,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利,轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/440534.html
標籤:其他
上一篇:設計模式之工廠模式
下一篇:設計模式之工廠模式
