天天看點

圖解高内聚與低耦合,傻瓜都能看懂!

子產品

子產品就是從邏輯上将系統分解為更細微的部分, 分而治之, 複雜問題拆解為若幹簡單問題, 逐個解決.

耦合主要描述子產品之間的關系, 内聚主要描述子產品内部. 子產品的粒度可大可小, 可以是函數, 類, 功能塊等等.

###

耦合

子產品之間存在依賴, 導緻改動可能會互相影響, 關系越緊密, 耦合越強, 子產品獨立性越差.

比如子產品A直接操作了子產品B中資料, 則視為強耦合, 若A隻是通過資料與子產品B互動, 則視為弱耦合.

獨立的子產品便于擴充, 維護, 寫單元測試, 如果子產品之間重重依賴, 會極大降低開發效率.

圖解高内聚與低耦合,傻瓜都能看懂!

内聚

子產品内部的元素, 關聯性越強, 則内聚越高, 子產品單一性更強. 一個子產品應當盡可能獨立完成某個功能,

如果有各種場景需要被引入到目前子產品, 代碼品質将變得非常脆弱, 這種情況建議拆分為多個子產品.

低内聚的子產品代碼, 不管是維護, 擴充還是重構都相當麻煩, 難以下手.

圖解高内聚與低耦合,傻瓜都能看懂!

接口設計原則

好的接口應當滿足設計模式六大原則, 很多設計模式, 架構都是基于高内聚低耦合這個出發點的.

單一職責原則: 一個類隻負責一個功能領域中的相應職責.

開閉原則: 一個軟體實體應當對擴充開放,對修改關閉.

裡氏代換原則: 所有引用基類(父類)的地方必須能透明地使用其子類的對象.

依賴倒轉原則: 抽象不應該依賴于細節, 細節應當依賴于抽象. 換言之, 要針對接口程式設計, 而不是針對實作程式設計.

接口隔離原則: 使用多個專門的接口, 而不使用單一的總接口, 即用戶端不應該依賴那些它不需要的接口.

迪米特法則: 一個軟體實體應當盡可能少地與其他實體發生互相作用, 例如外觀模式, 對外暴露統一接口.

舉幾個栗子

*外觀模式 *

為系統中多個子系統提供一緻的對外調用, 對用戶端隐藏子系統細節, 降低其與子系統的耦合.

圖解高内聚與低耦合,傻瓜都能看懂!

橋接模式

JDBC中的把面向廠商的接口(Driver)和面向使用者的API(DriverManager)做了拆分隔離.

圖解高内聚與低耦合,傻瓜都能看懂!

擴充卡模式

引入第三方庫(hibernate, log4j), 不應該直接在代碼中繼承或者使用其實體類.

需要抽出上層統一接口, 然後增加實作類, 對外暴露接口.

圖解高内聚與低耦合,傻瓜都能看懂!

推薦去我的部落格閱讀更多:

1.Java JVM、集合、多線程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、後端、架構、阿裡巴巴等大廠最新面試題

覺得不錯,别忘了點贊+轉發哦!

繼續閱讀