設計模式中總共有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.一個類對另外一個類的依賴性應當是建立在最小的接口上。