1. 程式人生 > >軟件設計模式七大原則的含義附舉例說明

軟件設計模式七大原則的含義附舉例說明

其他 要求 public 開發 地方 但是 步驟 參數 很多

設計模式(面向對象)有七大原則,分別是:

  1.開放-封閉原則

  2.單一職責原則

  3.依賴倒轉原則

  4.迪米特法則(也稱為最小知識原則)

  5.接口隔離原則

  6.合成/聚合復用原則

  7.裏氏代換原則

開放-封閉原則具有理想主義的色彩,他是面向對象設計的終極目標。其他幾條則可以看做是開放-封閉原則的實現方法。設計模式就是實現了這些原則,從而達到了代碼復用,增加可維護性的目的。

.開放-封閉原則

  概念:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。模塊應該盡量在不修改原代碼的情況下進行擴展。

  在軟件周期內,因為變化、升級和維護等原因需要對軟件原有代碼進行修改時,可能會給代碼引入錯誤,也可能會使我們不得不對整個功能進行重構,並且需要原有代碼經過重新測試。當軟件需求變化時,盡量通過擴展軟件實體的行為來實現變化,而不是通過修改已有代碼來實現變化。

  開放封閉原則是面向對象設計的核心所在,遵循這個原則可以帶來面向對象技術所聲稱的巨大好處,也就是可維護、可擴展、可復用、靈活性好。開發人員應該僅對程序中呈現的頻繁變化的那些部分作出抽象,然而,對於應用程序中的每個部分都刻意的進行抽象同樣不是一個好主意。拒絕不成熟的抽象和抽象本身一樣重要。

  註意事項:

  1.通過接口或者抽象類約束擴展,對擴展進行邊界限定,不允許出現在接口或抽象類中不存在的public方法。

  2.參數類型、引用對象盡量使用接口或者抽象類,而不是實現類

  3.抽象層盡量保持穩定,一旦確定不允許修改。

.單一職責原則

  概念:就一個類而言,應該僅有一個引起它變化的原因。

  當我們在做編程的時候,很自然的回個一個類加上各種各樣的功能。這樣意味著,無論任何需求要來,你都需要更改這個類,這樣其實是很糟糕的,維護麻煩,復用不可能,也缺乏靈活性。如果一個類承擔的職責過多,就等於把這些職責耦合起來,一個職責變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭到很多意想不到的破壞。

.依賴倒轉原則

  概念:依賴倒轉原則是程序要依賴於抽象接口,不要依賴於具體實現。簡單的來說就是要求對抽象進行編程,不要對實現進行編程,這樣就降低了客戶與實現模塊的耦合。

  有時候為了代碼復用,一般會把常用的代碼寫成函數或類庫。這樣開發新項目的時候直接用就行了。比如做項目的時候大多要訪問數據庫,所以我們把訪問數據庫的代碼寫成了函數。每次做項目去調用這些函數。那麽問題來了,我們要做新項目的時候,發現業務邏輯高層模塊都是一樣的,但客戶卻希望使用不同的數據庫或存儲方式,這時就出現了麻煩。我們希望能再次利用這些高層模塊,但是高層模塊都是與低層的訪問數據庫綁定在一起,沒辦法復用這些高層的模塊。所以不管是高層模塊和底層模塊都應該依賴於抽象,具體一點就是接口或者抽象類,只要接口是穩定的,那麽任何一個更改都不用擔心。

  註意事項:

  1.高層模塊不應該依賴於低層模塊。兩個都應該依賴抽象。

  2.抽象不應該依賴結節。細節應依賴於抽象。

.迪米特法則(也稱為最小知識原則)

  概念:一個軟件實體應當盡可能的少與其他實體發生相互作用。每一個軟件單位對其他軟件單位都只有最少的知識,而且局限於那些與本單位密切相關的軟件單位。迪米特法則的初衷在於降低類之間的耦合。由於每個類盡量減少對其他類的依賴,因此,很容易使得系統的功能模塊功能獨立,相互之間不存在(或很少有)依賴關系。迪米特法則不希望類之間建立直接的聯系。如果有真的需要建立聯系的,也希望能通過他的友元類來轉達。因此,應用迪米特法則有可能造成一個後果就是:系統中存在大量的中介類,這些類之所以存在完全是為了傳遞類之間的相互關系,這在一定程度上增加了系統的復雜度。

.接口隔離原則

  概念:客戶端不應該依賴他不需要的接口,類間的依賴關系應建立在最小的接口上。

  接口隔離原則的核心定義,不出現臃腫的接口,但是“小”是有限度的,首先就是不能違反單一職責原則。

.合成/聚合復用原則

  概念:合成/聚合復用原則經常又叫做合成復用原則,就是在一個新的對象裏面使用一些已有的對象,使之成為新對象的一部分,新的對象通過這些對象的委派達到復用已有功能的目的。他的設計原則是:要盡量使用合成/聚合,盡量不要使用繼承。

.裏氏代換原則

  概念:裏氏代換原則是面向對象設計的基本原則之一。即任何基類可以出現的地方,子類一定可以出現。裏氏代換原則是繼承復用的基石,只有當衍生類可以替換掉基類,軟件單位的功能不受影響時,基類才能被真正復用,而衍生類也能夠在積累的基礎上增加新的行為,裏氏代換原則是對“開-閉”原則的補充。實現“開-閉”原則的關鍵步驟就是抽象化。在基類與子類的繼承關系就是抽象化的具體實現,所以裏氏代換原則是對實現抽象化的具體步驟的規範。

  當滿足繼承的時候,父類肯定存在非私有的成員,子類肯定是得到了父類的這些非私有成員(假設,父類的成員全部是私有的,那麽子類沒辦法從父類繼承任何成員,也就不存在繼承的額概念了)。既然子類繼承了父類的這些非私有成員,那麽父類對象也就可以在子類對象中調用這些非私有成員。所以,子類對象可以替換父類對象的位置。

  在裏氏帶環原則下,當需求有變化時,只需繼承,而別的東西不會改變。由於裏氏代換原則才使得開放封閉稱為可能。這樣使得子類在父類無需修改就可以擴展。

軟件設計模式七大原則的含義附舉例說明