面向對象設計的六大原則

要把軟件作得很是靈活又要便於維護是一個很困難的事情。靈活的軟件他的結構就複雜,維護起來就困難。有得必有失,關鍵就在於如何處理這二者,使得大於失。軟件的設計開發應遵循如下六大原則: 設計模式

單一職責原則(Single Responsibility Principle)

定義:不要存在多於一個致使類變動的緣由。通俗的說,即一個類只負責一項職責。框架

問題由來:類T負責兩個不一樣的職責:職責P1,職責P2。當因爲職責P1需求發生改變而須要修改類T時,有可能會致使本來運行正常的職責P2功能發生故障。函數

解決方案:遵循單一職責原則。分別創建兩個類T一、T2,使T1完成職責P1功能,T2完成職責P2功能。這樣,當修改類T1時,不會使職責P2發生故障風險;同理,當修改T2時,也不會使職責P1發生故障風險。測試

里氏替換原則(Liskov Substitution Principle)

確定有很多人跟我剛看到這項原則的時候同樣,對這個原則的名字充滿疑惑。其實緣由就是這項原則最先是在1988年,由麻省理工學院的一位姓裏的女士(Barbara Liskov)提出來的。spa

定義1若是對每個類型爲 T1的對象 o1,都有類型爲 T2 的對象o2,使得以 T1定義的全部程序 P 在全部的對象 o1 都代換成 o2 時,程序 P 的行爲沒有發生變化,那麼類型 T2 是類型 T1 的子類型。設計

定義2全部引用基類的地方必須能透明地使用其子類的對象。對象

問題由來:有一功能P1,由類A完成。現須要將功能P1進行擴展,擴展後的功能爲P,其中P由原有功能P1與新功能P2組成。新功能P由類A的子類B來完成,則子類B在完成新功能P2的同時,有可能會致使原有功能P1發生故障。繼承

解決方案:當使用繼承時,遵循里氏替換原則。類B繼承類A時,除添加新的方法完成新增功能P2外,儘可能不要重寫父類A的方法,也儘可能不要重載父類A的方法。接口

里氏替換原則通俗的來說就是:子類能夠擴展父類的功能,但不能改變父類原有的功能。生命週期

依賴倒置原則(Dependence Inversion Principle)

定義:高層模塊不該該依賴低層模塊,兩者都應該依賴其抽象;抽象不該該依賴細節;細節應該依賴抽象。

問題由來:類A直接依賴類B,假如要將類A改成依賴類C,則必須經過修改類A的代碼來達成。這種場景下,類A通常是高層模塊,負責複雜的業務邏輯;類B和類C是低層模塊,負責基本的原子操做;假如修改類A,會給程序帶來沒必要要的風險。

解決方案:將類A修改成依賴接口I,類B和類C各自實現接口I,類A經過接口I間接與類B或者類C發生聯繫,則會大大下降修改類A的概率。

傳遞依賴關係有三種方式,以上的例子中使用的方法是接口傳遞,另外還有兩種傳遞方式:構造方法傳遞setter方法傳遞,相信用過Spring框架的,對依賴的傳遞方式必定不會陌生。

接口隔離原則(Interface Segregation Principle)

定義:客戶端不該該依賴它不須要的接口;一個類對另外一個類的依賴應該創建在最小的接口上。

問題由來:類A經過接口I依賴類B,類C經過接口I依賴類D,若是接口I對於類A和類B來講不是最小接口,則類B和類D必須去實現他們不須要的方法。

解決方案:將臃腫的接口I拆分爲獨立的幾個接口,類A和類C分別與他們須要的接口創建依賴關係。也就是採用接口隔離原則。

迪米特法則(Law Of Demeter)

定義:一個對象應該對其餘對象保持最少的瞭解。

問題由來:類與類之間的關係越密切,耦合度越大,當一個類發生改變時,對另外一個類的影響也越大。

解決方案:儘可能下降類與類之間的耦合。

只與直接的朋友通訊。其中,咱們稱出現成員變量、方法參數、方法返回值中的類爲直接的朋友,而出如今局部變量中的類則不是直接的朋友。

開閉原則(Open Close Principle)

定義:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。

問題由來:在軟件的生命週期內,由於變化、升級和維護等緣由須要對軟件原有代碼進行修改時,可能會給舊代碼中引入錯誤,也可能會使咱們不得不對整個功能進行重構,而且須要原有代碼通過從新測試。

解決方案:當軟件須要變化時,儘可能經過擴展軟件實體的行爲來實現變化,而不是經過修改已有的代碼來實現變化。

用抽象構建框架,用實現擴展細節。

設計模式六大原則 - liubin21 - 搏擊俱樂部

圖中的每一條維度各表明一項原則,咱們依據對這項原則的遵照程度在維度上畫一個點,則若是對這項原則遵照的合理的話,這個點應該落在紅色的同心圓內部;若是遵照的差,點將會在小圓內部;若是過分遵照,點將會落在大圓外部。一個良好的設計體如今圖中,應該是六個頂點都在同心圓中的六邊形。

設計模式六大原則 - liubin21 - 搏擊俱樂部

在上圖中,設計一、設計2屬於良好的設計,他們對六項原則的遵照程度都在合理的範圍內;設計三、設計4設計雖然有些不足,但也基本能夠接受;設計5則嚴重不足,對各項原則都沒有很好的遵照;而設計6則遵照過渡了,設計5和設計6都是迫切須要重構的設計。

相關文章
相關標籤/搜索