設(shè)計模式之七大設(shè)計原則
定義:在進行軟件系統(tǒng)設(shè)計時所要遵循的一些經(jīng)驗準(zhǔn)則,應(yīng)用該準(zhǔn)則的目的通常是為了避免某些經(jīng)常出現(xiàn)的設(shè)計缺陷。(百度百科) 目標(biāo):降低系統(tǒng)耦合度、提高代碼復(fù)用率、增強系統(tǒng)可靠性或使得系統(tǒng)易于維護。
二、七大原則(一)單一職責(zé)原則(Single Responsibility Principle);
一個類應(yīng)該有且僅有一種職責(zé),此外應(yīng)該只有一種原因讓他改變。
不管是方法、類、類庫、解決方案或者是這一個項目都需要符合單一原則。一個方法,我只處理一個功能邏輯。一個類,我只實現(xiàn)一個業(yè)務(wù)或者場景。一個類庫,我的職責(zé)就是數(shù)據(jù)庫啊或者工廠或者前端或者幫助類一個解決方案,就是后臺系統(tǒng)就是后臺系統(tǒng),前臺就是前臺,或者定時服務(wù),或者接口。

(二)開閉原則(Open Closed Principle);
對修改關(guān)閉,對擴展開放。開閉原則是其他五個原則的基礎(chǔ),可以簡單理解為:開閉是抽象類,其他五個是實現(xiàn),是指導(dǎo)設(shè)計的工具和方法。
【示例】基礎(chǔ)需求:汽車可以跑起來。追加需求:卡車、賽車;


(三)里氏替換原則(Liskov Substitution Principle);
任何出現(xiàn)父類的地方都可以用子類替換,而不影響程序正常運行。核心是“約定”,父類與子類的約定。里氏替換原則要求子類在進行設(shè)計的時候要遵守父類的一些行為約定。這里的行為約定包括:函數(shù)所要實現(xiàn)的功能,對輸入、輸出、異常的約定,甚至包括注釋中一些特殊說明等。



(四)迪米特法則(Law of Demeter);
不要和陌生人說話(只與你的直接朋友通信)。迪米特法則又叫最少知道原則,即一個類對自己依賴的類知道的越少越好,對于依賴的類不管有多復(fù)雜,都盡量將邏輯封裝在類的內(nèi)部,對外除了提供public方法,不泄漏任何信息。


(五)接口隔離原則(Interface Segregation Principle);
客戶端不應(yīng)該強行依賴它不需要的接口;類間的依賴關(guān)系應(yīng)該建立在最小的接口上。
1、接口盡量小 2、接口高內(nèi)聚 3、接口設(shè)計的限度(完全按此原則會導(dǎo)致接口數(shù)量暴增)
(六)依賴倒置原則(Dependence Inversion Principle)
上層模塊不應(yīng)該依賴下層模塊,兩者應(yīng)依賴其抽象;抽象不應(yīng)該依賴細節(jié),細節(jié)應(yīng)該依賴抽象。依賴倒置的本質(zhì)是利用抽象解耦迫不得已的依賴,使得依賴的下層模塊的修改不會影響上層模塊 【示例】場景:人駕駛汽車






(七)合成復(fù)用原則(Composite Reuse Principle,CRP)
盡量先使用聚合、組合來實現(xiàn),之后再考慮使用繼承。降低耦合度,將接口或者抽象類以聚合或者組合的方式引入,可以任意的靈活的去實現(xiàn)對應(yīng)的子類。【示例】汽車按“動力源”劃分可分為汽油汽車、電動汽車等;按“顏色”劃分可分為白色汽車、黑色汽車和紅色汽車等。如果同時考慮這兩種分類,其組合就很多。


(1) 單一職責(zé)原則:一個類或接口只承擔(dān)一個職責(zé)。
(2) 開閉原則:對軟件實體的改動,最好用擴展而非修改的方式
(3) 里氏替換原則:在繼承類時,務(wù)必重寫(override)父類中所有的方法,尤其需要注意父類的protected方法(它們往往是讓你重寫的),子類盡量不要暴露自己的public方法供外界調(diào)用。
(4) 迪米特法則:盡量減少對象之間的交互,從而減小類之間的耦合。
(5) 接口隔離原則:不要對外暴露沒有實際意義的接口。
(6) 依賴倒置原則:高層模塊不應(yīng)該依賴于低層模塊,而應(yīng)該依賴于抽象。抽象不應(yīng)依賴于細節(jié),細節(jié)應(yīng)依賴于抽象。
