[設計模式]-架構中的設計原則(筆記ing)

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

1、單一職責原則(SRP)

核心思想:系統中每一個對象都應該只有一個單獨的職責,而所有對象所關注的就是自身指責的完成。

SRP就是我們所說的"高內聚、低耦合"

優點:消除耦合

可以降低類的複雜度,一個類只負責一項職責,其邏輯肯定要比負責多項職責簡單的多;提高類的可讀性,提高系統的可維護性;變更引起的風險降低,變更是必然的,如果單一職責原則遵守的好,當修改一個功能時,可以顯著降低對其他功能的影響。

2、里氏替換原則(LSP)

核心思想:在任何父類出現的地方都可以用子類來替代

LSP通俗的來講就是:子類可以擴展父類的功能,但不能改變父類原有的功能。它包含4層含義:

子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法。子類中可以增加自己特有的方法。當子類的方法重載父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入參數更寬鬆。當子類的方法實現父類的抽象方法時,方法的後置條件(即方法的返回值)要比父類更嚴格。

LSP關注的是怎樣良好的使用繼承,也就是說不要濫用繼承,它是繼承複用的基石

經典”正方形不是矩形“的問題。

。。。

3、依賴倒置原則(DIP)

核心思想:要依賴於抽象,不要依賴於具體實現

DIP的意思是:在應用程序中,所有的類如果使用或依賴於其他的類,則都應該依賴於這些其他類的抽象類,而不是這些其他類的具體實現類。抽象層次應該不依賴於具體的實現細節,這樣才能保證系統的可複用性與可維護性。因此爲實現這一原則,我們要在編程時針對接口編程,而不針對實現編程

低層模塊儘量都要有抽象類或接口,或者兩者都有。變量的聲明類型儘量是抽象類或接口。使用繼承時遵循里氏替換原則。

4、接口分離原則(ISP)

核心思想:不應該強迫客戶程序依賴它們不需要使用的方法

ISP的意思是:一個接口應該只提供一種對外的功能,不應該把所有的操作都封裝到一個接口中(這裏的接口分兩種:對象接口(類),類接口(Class Interface),P30)。

也就是說,ISP要求在一個模塊中應該只依賴它需要的接口,以保證接口的小純潔。而且需要接口儘量小,即設計接口時應儘量細化,不要定義太臃腫的接口

與單一職責原則比較:

  • 單一職責原則要求類與接口職責單一,注重的是職責,是業務邏輯上的劃分。而接口分離原則注重對接口依賴的隔離
  • 單一職責原則主要是約束類,其次纔是接口和方法,它針對的是程序中的實現和細節;而接口分離原則主要約束接口,主要針對抽象,針對程序整體框架的構建

5、迪米特原則(LOD)-最少知識原則(LKP)

核心思想:一個對象應當對其他對象儘可能少的瞭解。即降低對象之間的耦合

更簡單的定義:只與直接的朋友通信--<觀察者模式?>

LOD的核心觀念是類間解耦,弱耦合。只有弱耦合了以後,類的複用性纔可以提高

過分的使用迪米特原則,會產生大量的中介和傳遞類,導致系統複雜度變大。所以在採用迪米特法則時要反覆權衡,既做到結構清晰,又要高內聚低耦合

6、開閉原則(OCP)

核心思想:一個對象應對擴展開放,對修改關閉

OCP的意思是:軟件需要變化時,儘量通過擴展軟件實體的行爲來實現變化,而不是通過修改已有的代碼。也就是說,開發人員一旦寫出了可以運行的代碼,就不應去改變它,而是要保證它能一直運行下去,如何做到這一點呢?這就需要藉助抽象與多態,即把可能變化的內容抽象出來,從而使抽象的部分是相對穩定的,而具體的實現層則是可以改變和擴展的

開閉原則算是前5種原則的一個抽象總結,前5種是開閉原則的一些具體實現。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章