[鑽研Java設計模式:不斷完善中]

軟件設計七大原則 (帶 * 號爲重要,里氏原則和契約原則暫省略)

  • 1. 開閉原則*
  • 2. 依賴倒置原則*
  • 3. 單一職責原則
  • 4. 接口隔離原則
  • 5. 迪米特原則

對設計原則不能無腦全部遵守要根據實際業務場景來進行設計

1.開閉原則簡介*

  • 開閉原則定義: 一個軟實體如 類, 模塊和函數應該對擴展開放, 對修改關閉

  • 開閉原則slogan:用抽象構建框架,用實現擴展細節 
  • 優點: 提高軟件系統的可複用性及可維護性

1.1 舉個栗子: 開閉原則在日常開發中的應用

比如 JavaWeb 開發中大名鼎鼎 ORM框架Mybatis就用到了開閉原則, 在和數據庫打交道的過程中會有些固定的邏輯, 比如 分頁查詢,數據庫方言 等, 這些代碼會在我們的軟件系統裏出現多次 , 讓開發者不厭其煩 , 而 Mybatis 提供了 ExamplePlugin 攔截器讓 開發者在Mybatis根據XML生成SQL 語句後 , 對指定的SQL語句進行二次修改 , 我們可在攔截器中統一處理固定邏輯 , 減少了我們代碼量, 用實際行動詮釋了 用抽象構建框架,用實現擴展細節

代碼Demo

2. 依賴倒置原則簡介

  • 依賴倒置原則定義:
    + 高層模塊不應該依賴最低層模塊, 二者都應該依賴其抽象
    + 抽象不應該依賴細節,細節應該依賴抽象
    + 針對接口編程, 不針對實現編程

  • 開閉原則slogan:以抽象爲基礎搭建的架構比以細節搭建的架構穩定的多 ! 

  • 優點: 可以減少類間的耦合性,提高系統穩定性,提高代碼可讀性和可維護性, 可降低修改程序造成的風險

2.1 舉個栗子: 依賴倒置原則在日常開發中的應用

比如 JavaWeb 開發中大名鼎鼎 Spring框架IOC, 就基於依賴倒置原則。

代碼Demo

3. 單一職責原則簡介

  • 單一職責原則 定義:
    + 不要存在多於一個導致類變更的原因

  • 開閉原則slogan一個類/接口/方法只負責一項職責 ! 

  • 優點: 降低類的複雜度, 提高類的可讀性, 提高系統的可維護性, 降低變更引起的風險

3.1 舉個栗子: 單一職責原則在日常開發中的應用

如果對單一原則的使用場景控制不得當可能會導致方法爆炸. 一般在 編寫接口和方法時必須使用單一原則 , 類則分情況而定

此處輸入圖片的描述

4. 接口隔離原則簡介

  • 4.1 接口隔離原則 定義:
    + 用多個專門的接口,而不使用單一的總接口,客戶端不應該依賴他不需要的接口。
    + 一個類對一個類的依賴應該建立在最小的接口上 建立單一接口, 不要建立龐大臃腫的接口。
    + 儘量細化接口,接口中的方法儘量少!

  • 接口隔離slogan注意適度原則,一定要適度,多做前期策劃工作,確保高內聚低耦合!

  • 優點: 符合我們常說的高內聚低耦合的設計思想, 從而使得類具有很好的可讀性,可擴展性和可維護性

此處輸入圖片的描述

4.1 舉個栗子: 接口隔離原則在日常開發中的應用

servlet 2. 中 提供了一系列的 listener監聽器接口,遵守了接口隔離原則來監聽不同的資源變化!*

javax.servlet包下

ServletContextListener:
實現該接口,重寫 contextInitialized 與 contextDestroyed 方法可以讓實現類的方法在Web容器啓動與關閉時被調用,可以用來初始化Web 資源, 註銷服務 等~

ServletRequestListener:
實現該接口,重寫 requestDestroyed 與 requestInitialized方法可以讓實現類的方法在接收http請求時可用於請求參數編碼轉義,統計網站請求次數等~

HttpSessionListener
實現該接口,重寫 sessionCreated 與 sessionDestroyed方法可以讓實現類的方法Session創建和銷燬時被調用可以統計Session的使用情況~

javax.servlet.http包下

HttpSessionBindingListener
實現該接口,重寫 valueBound 與 valueUnbound方法可以讓實現類的方法一對一的Session綁定和去取消綁定,比如用戶在平臺上有三種狀態,在線,離線,隱身, 當用戶需要隱身時,我們就可以使用HttpSessionListener在將其從在線Session列表裏放到隱身Session列表~

HttpSessionActivationListener
實現該接口,重寫 sessionWillPassivate 與 sessionDidActivate方法可以讓實現類的方法在session對象序列化(鈍化)前和反序列化(活化)後都會被執行

我們在自定義servlet監聽器時可以根據業務場景,實現不同的Listener,servlet 2. 遵守了接口隔離插件*

5. 迪米特原則簡介

  • 5.1 迪米特原則 定義:
    一個對象應該對其他對象保持最小的瞭解,也叫最少知道原則.
  • 接口隔離slogan出現在成員變量,方法的輸入,輸出參數中的類稱爲成員朋友類,而出現在方法體內部的類不屬於朋友類.

  • 優點: 降低類之間的耦合

此處輸入圖片的描述

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