天天看點

OO設計的重要原則

1.開閉原則 (Open-Closed Principle)

   子產品在開放性方面應該是開放的(易于擴充),在更改性方面應該是封閉的(易于修改而不需要更改類的源代碼)。

   實作OCP的技術主要有多态和模闆,均基于抽象。我們應該努力實作OCP以高效地複用和維護代碼。

2.Liskov替換法則 (Liskov Substitution Principle)

   使用指向基類B(抽象類或者接口)引用的子產品(方法或者類),必須能夠接受任何繼承或實作B的具體類S,仍然能夠正常工作而不需要知道具體類的實作細節。

3.針對接口程式設計

   元件之間應該盡可能使用接口進行通訊,具體的業務邏輯由子類去實作不變的接口。

4.将可變的部分和不可變的部分分離

   任何時候都将不變的接口與可變的實作分離。 如果使用繼承的複用技術,我們可以在抽象基類或接口中定義好不可變的部分,而由其子類去具體實作可變的部分。如果使用對象組合,我們可以定義好不可變的部分,而可變的部分可以由不同的元件運作時動态配置。

5.優先使用對象組合,而不是類繼承

   優先使用黑箱複用(對象組合)而不是白箱複用(類繼承)。利用對象組合我們可以在運作時動态配置元件的功能,并防止類層次規模的爆炸性增長。

6.高内聚,低耦合

    很簡單的一句話卻是軟體設計的精華所在:一個子產品包含的功能彼此相關,互相依賴,而與外界很少關聯,并且沒有承擔過多的責任,這樣的子產品(子系統或者類)稱之為高内聚的(High Cohesion)。如果一個子產品為實作自身的功能,并不需要了解或者依賴太多外部的知識,則該子產品是低耦合的(Low Coupling)。

7.使用多态機制消除大量的IF/CASE語句

大量的IF/CASE使得代碼難于維護和擴充,我們應該用多态來取代條件判斷邏輯,狀态和政策模式都可以幫助實作這一機制。

8.在多線程程式中謹慎地使用Singleton模式

   Singleton模式在多線程應用中的不恰當使用會導緻性能問題,在用到該模式時盡可能使用lazy initialization 方法。