架構師內功心法:設計模式(一)軟件架構設計原則

寫在前面:

  •  你好,歡迎關注!
  •  我熱愛技術,熱愛分享,熱愛生活, 我始終相信:技術是開源的,知識是共享的!
  •  博客裏面的內容大部分均爲原創,是自己日常的學習記錄和總結,便於自己在後面的時間裏回顧,當然也是希望可以分享 自己的知識。如果你覺得還可以的話不妨關注一下,我們共同進步!
  •  個人除了分享博客之外,也喜歡看書,寫一點日常雜文和心情分享,如果你感興趣,也可以關注關注!
  •  公衆號:傲驕鹿先生

目錄

一、開閉原則( Open-Closed Principle )

二、依賴倒置(Dependence Inversion Principle)

三、單一職責原則( Simple Responsibility Pinciple )

四、接口隔離原則( Interface Segregation Principle)

五、迪米特法則( Law of Demeter )

六、里氏替換原則( Liskov Substitution Principle )

七、合成複用原則( Composite/Aggregate Reuse Principle )

設計模式分類


一、開閉原則( Open-Closed Principle )

  開閉原則是對擴展和修改行爲的一個原則,指的是軟件中的函數、類、模塊應該對擴展開放,對修改關閉。強調的是用抽象構建框架,用實現擴展細節。常用於解決的問題如:更新版本時,儘量在不修改源代碼,但增加新功能。

二、依賴倒置(Dependence Inversion Principle)

  依賴倒置是指設計系統代碼結構時,高層模塊不依賴底層模塊,它們都應依賴於其抽象。細節應該依賴抽象。通過依賴倒置,可減少系統之間模塊的耦合性,提高系統的穩定性,提高系統的可讀性與可維護性,降低修改程序帶來的風險。

  ps:以抽象爲基準設計的架構要比以細節爲基準設計的架構穩定很多。所以在拿到需求時,要面向接口編程,先頂層再細節來設計代碼結構。

       依賴有依賴注入(最常用)、構造方法注入(單例不可用)、setter注入(單例多用)。

三、單一職責原則( Simple Responsibility Pinciple )

  是指一個類只負責一個功能,不要存在多餘一個導致類變更的原因。假設一個類負責兩個職責,修改一個可能會影響另一個功能發生故障。只負責一個類可降低類的複雜度,提高類的可讀性,提高系統的可維護性,降低變更引起的風險。

四、接口隔離原則( Interface Segregation Principle)

  是指用多個專門的接口,而不是使用單一的總接口,客戶端不應該依賴他不需要的接口。這個原則指導我們在設計接口時應注意以下幾點:

  1.一個類對一個類的依賴應該建立在最小的基礎上

  2.建立單一接口,不應建立臃腫的接口。

  3.細化接口功能,每個接口內方法要儘量少(不是越少越好,要適度)

  接口隔離原則符合我們所說的“高內聚,低耦合”的思想,從而使類具有很好的可維護性、可讀性、可擴展性。我們在設計接口時,要多花時間去思考業務模型,包括以後可能要修改的還要去做一些預判。所以,對於抽象,對業務模型的理解是最重要的。

五、迪米特法則( Law of Demeter )

   是指一個對象應該保持對其他對象最少的瞭解,也叫最少了解法則,儘量降低類與類之間的耦合。它強調之和朋友交流,不和陌生人說話。如類中的成員變量、函數參數、函數返回值都是朋友,函數內部的對象是陌生人。

六、里氏替換原則( Liskov Substitution Principle )

  里氏替換原則可以理解爲一個軟件實體如果能適用父類的話,一定也能適用子類。所有能引用父類的地方都能透明的使用子類對象。子類可替換父類對象而使程序邏輯不變。引申爲:子類可擴展父類的方法,但不能覆蓋父類原有的功能。

  總結爲:1.子類可以實現父類的抽象方法,但不能父類的非抽象方法。

      2.子類可增加自己特有的方法。

      3.當子類的方法重載父類的方法時,子類的前置參數(入參)相比父類更寬鬆。

      4.當子類的方法重載父類的方法時,子類的後置參數(函數返回值)相比父類更嚴格或相等。

七、合成複用原則( Composite/Aggregate Reuse Principle )

  指儘量使用對象組合、聚合,而不是繼承來實現軟件複用的目的。這樣可以使類更加靈活、降低類與類之間的耦合度。

  繼承叫白箱複用,會將父類的實現細節全部暴露給子類。合成複用叫黑箱複用,對類以外是無法獲取到實現細節的。

總結:

  我們在寫代碼時,要根據實際情況(人力、時間、成本)綜合考慮,不需刻意追求完美,要在適當的場景考慮設計原則,體現的是一種平衡取捨,來幫助我們設計出更優雅的代碼結構。

設計模式分類

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章