軟件設計七大原則 (帶 * 號爲重要,里氏原則和契約原則暫省略)
- 1. 開閉原則*
- 2. 依賴倒置原則*
- 3. 單一職責原則
- 4. 接口隔離原則
- 5. 迪米特原則
對設計原則不能無腦全部遵守要根據實際業務場景來進行設計
1.開閉原則簡介*
- 開閉原則定義: 一個軟實體如 類, 模塊和函數應該對擴展開放, 對修改關閉
- 開閉原則slogan:用抽象構建框架,用實現擴展細節
- 優點: 提高軟件系統的可複用性及可維護性
1.1 舉個栗子: 開閉原則在日常開發中的應用
比如 JavaWeb 開發中大名鼎鼎 ORM框架 的 Mybatis就用到了開閉原則, 在和數據庫打交道的過程中會有些固定的邏輯, 比如 分頁查詢,數據庫方言 等, 這些代碼會在我們的軟件系統裏出現多次 , 讓開發者不厭其煩 , 而 Mybatis 提供了 ExamplePlugin 攔截器讓 開發者在Mybatis根據XML生成SQL 語句後 , 對指定的SQL語句進行二次修改 , 我們可在攔截器中統一處理固定邏輯 , 減少了我們代碼量, 用實際行動詮釋了 用抽象構建框架,用實現擴展細節
2. 依賴倒置原則簡介
- 依賴倒置原則定義:
+ 高層模塊不應該依賴最低層模塊, 二者都應該依賴其抽象
+ 抽象不應該依賴細節,細節應該依賴抽象
+ 針對接口編程, 不針對實現編程
- 開閉原則slogan:以抽象爲基礎搭建的架構比以細節搭建的架構穩定的多 !
- 優點: 可以減少類間的耦合性,提高系統穩定性,提高代碼可讀性和可維護性, 可降低修改程序造成的風險
2.1 舉個栗子: 依賴倒置原則在日常開發中的應用
比如 JavaWeb 開發中大名鼎鼎 Spring框架 的 IOC, 就基於依賴倒置原則。
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:出現在成員變量,方法的輸入,輸出參數中的類稱爲成員朋友類,而出現在方法體內部的類不屬於朋友類.
- 優點: 降低類之間的耦合