SRP
SRP(single responsibility principle)原則,即單一職責原則。
說明
職責:可以理解為變化的原因。
單一職責原則:就一個類而言,僅有一個引起它變化的原因
違反原則:如果一個類承擔的職責過多,職責必然存在耦合,一個職責的變化可能導致其他職責出現問題
舉例
1、數據庫類設計,針對數據庫連接和數據庫數據操作兩個職責,至少分成兩個類或者接口
2、實體類設計;針對實體類的業務計算與持久化兩個職責,至少分成
兩個類或者接口OCP
OCP(open closed principle)原則,即開閉原則。
說明
開閉原則:軟件可以擴展,但不能修改
特徵:對於擴展開放(open for extension),對於修改關閉(closed for modification)
注意點:避免過度設計,僅對頻繁變化的部分做抽象即可
舉例
1、Spring TransactionManager 採取模板設計模式:對數據庫事務的開啟,提交,回滾操作封閉,對數據庫數據的操作(頻繁變化的部分)增刪改查開放 。
LSP
LSP(liskov principle)原則,即liskov替換原則。
liskov
liskov替換原則由liskov提出: 是位女性(很了不起),芭芭拉·利斯科夫(Barbara Liskov),本名Barbara Jane Huberman。美國計算機科學家,2008年圖靈獎得主,2004年約翰·馮諾依曼獎得主。現任麻省理工學院電子電氣與計算機科學系教授。
說明
liskov替換原則:子類型必須能夠替換掉他們的父類
解釋說明:存在類PARENT,所在的程序中,如果類CHILD替換掉類PARENT,程序行為功能不變,則CHILD是PARENT的子類。可以看出違反LSP原則,間接也違反了OCP原則(開閉原則)
違反LSP原則的可選解決方案:當類CHILD無法替代類PARENT時,可以考慮分析CHILD和PARENT的行為,嘗試抽象出類SUPERPARENT
DIP
DIP(dependency inversion principle)原則,即依賴倒置原則。
說明
高層模塊不應該依賴於低層模塊,二者都應該依賴於抽象
抽象不應該依賴於細節,細節應該依賴於抽象
面向程序設計:策略依賴於細節,違背DIP原則
面向對象設計:真正的面向對象設計,倒置依賴關係,細節和抽象都依賴於接口
ISP
ISP(interface segregation principle)原則,即接口隔離原則。
說明
ISP原則:不強迫客戶依賴它們不用的方法
如果類的接口不是內聚的,就表示違反了
接口隔離原則違背ISP原則的解決方案
- 通過適配器,使用委託分離接口
- 接口分離,實現多個接口
注意
不能過度設計,一個類一個接口一個方法
LOD
LOD(Law of Demeter)原則,即最少知道原則(迪米特法則)
說明
一個軟件實體應當儘可能少的與其他實體發生相互作用
應該儘量減少對象之間的交互,如果兩個對象之間不必彼此直接通信,那麼這兩個對象就不應當發生任何直接的相互作用
閱讀更多 IT學習分享 的文章