- 單一職責(zé)原則:類的職責(zé)單一 【封裝性】
- 開放封閉原則:修改封閉,擴(kuò)展放開
- 里氏替換原則:子類完全可以替換父類
- 依賴倒置原則:具體實(shí)現(xiàn)依賴抽象接口
- 接口分離原則:(接口隔離)接口與接口的分離【橫向】 接口應(yīng)該盡量單一
- 迪米特原則 :最少知道原則,【不和陌生人說話】
單一職責(zé)原則 (SRP)[Single Responsibility Principle]
“業(yè)務(wù)”—— 職責(zé), 從業(yè)務(wù)的角度考慮。
業(yè)務(wù)的模塊化。
定義:就一個類而言,·
應(yīng)該僅有一個引起它變化的原因。
Note: 單一職責(zé)中的“職責(zé)”, 如何去衡量,是不可以度量的,由個人決定。
優(yōu)點(diǎn)
- 職責(zé)清晰明確。
- 復(fù)雜度降低、可讀性高、可維護(hù)性高、風(fēng)險降低、擴(kuò)展性好
開放封閉原則
定義:
軟件實(shí)體(類、模塊、函數(shù)等等)應(yīng)該可以擴(kuò)展,但是不可修改
修改關(guān)閉、擴(kuò)展開放
應(yīng)該是從一個類的角度去看這個問題。
現(xiàn)實(shí):
無論模塊是多磨封閉,都會存在一些無法對之封閉的變化。 既然不可能完全封閉,設(shè)計人員必須對于他設(shè)計的模塊應(yīng)該對那種變化封閉做出選擇。 他必須先猜測出最有可能發(fā)生的變化種類,然后構(gòu)造抽象來隔離那些變化。
PS: 主要是界定好變與不變的分割
里氏替換原則
定義:
子類必須能夠替換掉它們的父類型
常規(guī)描述: 一個軟件實(shí)體,如果使用的是一個父類的話,那么一定適用于其子類,而且它察覺不出父類對象和子類對象的區(qū)別。也就是說,在軟件里面,把父類都替換成它的子類,程序行為沒有變化。
PS: 使用的時候,就是子類化
只有當(dāng)子類可以替換掉父類,軟件單位的功能不受影響時,父類才能真正被復(fù)用,而子類也能夠在父類的基礎(chǔ)上增加新的行為。
正是因?yàn)?: 子類型的可替換才使得使用父類類型的模塊在無需修改的情況下就可以擴(kuò)展。
依賴倒置原則
定義:
A: 高層模塊不應(yīng)該依賴底層模塊。 兩個都應(yīng)該依賴抽象
B: 抽象不應(yīng)該依賴細(xì)節(jié)。 細(xì)節(jié)應(yīng)該依賴抽象。
即為: 針對接口變成,不要對實(shí)現(xiàn)編程。
QR : 什么叫做倒置呢?
AN : 面向過程的開發(fā)時,為了使得常用代碼可以復(fù)用,一般都會吧這些常用代碼寫成許許多多函數(shù)的程序庫,這樣我們在做新項(xiàng)目時,去調(diào)用這些低層的函數(shù)就可以了。 eg: 我們場做的項(xiàng)目大多要訪問數(shù)據(jù)庫,所以,我們就吧數(shù)據(jù)庫的代碼寫成了函數(shù),每次做新新項(xiàng)目時候就去調(diào)用這些函數(shù)。 —— 搞成模塊依賴底層模塊。
也就是實(shí)現(xiàn)依賴抽象 —— 倒置
eg: 這兒有一個“AutoSystem”類,它包含一個“ICar”接口。這個“AutoSystem”類根本不依賴于“FordCar”和“HondaCar”。所以,依賴關(guān)系被“倒置”了:“AutoSystem”模塊依賴于抽象,那些具體的汽車操作也依賴于相同的抽象。
接口分離原則 (接口之間隔離) [SIP](Interface Segregation Principle)
主要解決:
胖接口[fat interface]的問題。 建立單一接口,不要建立臃腫龐大的接口。
定義:
采用多個與特定客戶類有關(guān)的接口比采用一個通用的接口要好。
接口分離原則是什么
- 客戶端不應(yīng)該依賴它不需要的接口
- 類間的依賴關(guān)系應(yīng)該建立在最小的接口上。
也就是說:一個類對另一個類的依賴應(yīng)該建立在最小的接口上,通俗的講就是需要什么就提供什么,不需要的就不要提供。
迪米特原則
最少知識原則:其實(shí)就是知道最少原則,也就是調(diào)用涉及的依賴盡可能的小。不要和陌生人說話的原則
定義:如果兩個類不必彼此直接通信,那么兩個類就不應(yīng)當(dāng)發(fā)生直接的相互作用。如果其中一個類需要調(diào)用另一個類的某個方法的話,可以通過第三方轉(zhuǎn)發(fā)這個調(diào)用。
接口分離原則# 和 #單一職責(zé)原則# 區(qū)分
-
單一職責(zé):主要是對職責(zé)這個概念的劃分, 如果按照一個類作為一個職責(zé),那么久體現(xiàn)在類的封裝上面, 盡可能的只有一個因素影響到類。 -
接口分離: 主要是針對依賴的關(guān)系,對一個flat interface的拆分,讓依賴者更加后使用。
