面向對象的設計原則(設計模式中的7板斧)

  設計模式中總共有23中基本的設計模式,讓我們瞭解如何去“封裝變化”,“對象間鬆散耦合”,“針對接口編程”,從而去設計出易維護、易擴展、易複用、靈活性好的程序。不過,也有7種規範我們行爲的原則:

  • 單一職責原則
  • 開放封閉原則
  • 里氏代換原則
  • 依賴倒轉原則
  • 迪米特法則
  • 合成聚合原則
  • 接口隔離原則

一、單一職責原則

1.單一職責原則(SRP):就一個類而言,應該僅有一個引起它變化的原因。

2.如果一個類承擔的職責過多,就等於把這些職責耦合在一起,一個職責的變化可能會削弱或者抑制這個類完成其他職責的能力,這種耦合會導致脆弱的設計,當變化發生時,設計會遭到嚴重性的破壞。

3.軟件設計真正要做的許多內容,就是發現職責並把那些職責互相分離。如果你能想到多於一個動機去改變一個類,那麼這個類就具備多個職責,這是就應該去分離類的職責。

二、開放封閉原則

1.開放封閉原則(ASD):軟件實體(類、模塊、函數等等)應該可以擴展,但不可以修改。換句話說就是,對於擴展是開放的,對於修改是封閉的。

2.在設計出系統後可以保持穩定,從而使得系統可以在第一個版本以後(以之前版本爲基礎)不斷推出新的版本。

3.無論模塊是多麼的“封閉”,都會存在一些無法對之封閉的變化。這就要求設計人員尋找到最有可能變化的位置,然後構造抽象來隔離那些變化。

4.對於應用程序中的每個部分都刻意的進行抽象並不是一個好的主意,拒絕不成熟的抽象和抽象本身一樣重要。

三、里氏代換原則

1.里氏代換原則(LSP):子類型必須能替換掉它們的父類型(在軟件裏,把父類都替換爲它的子類,程序的行爲沒有變化)——使開放封閉稱爲可能。

2.子類可以替換掉父類,軟件單位的功能不受到影響時,父類才能真正被複用,而子類也能夠在父類的基礎上增加新的行爲。

四、依賴倒轉原則

1.依賴倒轉原則(ASD):高層模塊不應該依賴於底層模塊,兩個都應該依賴於抽象。抽象不應該依賴於細節,細節應該依賴於抽象。(依賴於抽象,而不依賴於具體)

2.針對接口編程,不要對實現編程。

3.依賴倒轉可以說是面向對象的標誌,如果編寫時考慮的都是如何針對抽象變成而不是針對細節編程,那這就是面向對象的設計。

五、迪米特法則

1.迪米特法則(LoD):如果兩個類不必彼此直接通信,那麼這兩個類就不應當發生直接的相互作用。如果其中一個類需要調用另一個類的方法的話,可以通過第三者轉發這個調用。

2.根本思想是強調類之間的鬆耦合。

3.類之間的耦合越弱,越有利於複用,一個處於弱耦合的類被修改,不會對有關係的類造成波及。

六、合成聚合原則

1.合成聚合原則(CARP):在一個新的對象裏面使用已有的對象,使之成爲新對象的一部分,新的對象通過向這些對象的委派達到複用已有功能的目的。

2.新對象對組成對象的內部實現不知,每個新對象可以將功能聚集在一個點上,可以在運行時動態更新,動態的引用與組成對象類型相同的對象。

3.要儘量使用合成聚合,而不是繼承關係達到複用的目的。

七、接口隔離原則

1.接口隔離原則(ISP):使用多個專門的接口比使用單一的總接口要好。

2.一個接口代表一個角色,不應當將不同的角色都交給一個接口。沒有關係的接口合併在一起,形成一個臃腫的大接口,這是對角色和接口的污染。

3.一個類對另外一個類的依賴性應當是建立在最小的接口上。

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