面向物件程式設計的六個基本原則
運用面向物件的思想進行軟體設計時要遵循的6個基本原則:
(1) 單一職責原則:一個類只負責一項職責。降低程式碼複雜度,增加可讀性可維護性,只有在邏輯足夠簡單、類中的方法足夠少時才可以在程式碼級別上違反單一職責原則。職責被分解為很多細粒度的職責,程式已經寫好的情況下,分解類開銷大(分解意味著零散,載入變的複雜,閱讀也變得複雜),修改類雖然違反單一職責原則,但是是個不錯的選擇。
(2) 里氏替換原則:子類可以擴充套件父類的功能,但不能改變父類原有的功能。這項原則並不是要避免多型,而是要求子類在繼承父類的時候,不能與父類已經定好的契約衝突,也就是不要重寫父類已經實現的方法。
LSP原則是:只要父類能出現的地方子類就可以出現,而且替換為子類還不產生任何錯誤或異常。怎麼做到:
子類過載父類方法,方法的前置條件要比父類更寬鬆
子類實現父類的抽象方法時,方法的後置條件要比父類更嚴格。
(3) 依賴倒置原則:高層模組不應該依賴低層模組,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。它的核心是面向介面程式設計。
老師和家長給孩子講故事,只要給老師和家長一個可讀的東西,他們就可以給孩子講故事了。(Readable、Speaker)。Test-Driven Development開發模式就是依賴倒置原則最成功的應用。
依賴的關係的實現:介面傳遞、構造方法傳遞、setter方法傳遞。
(4) 介面隔離原則:客戶端不應該依賴它不需要的介面,一個類對另一個類的依賴應該建立在最小的介面上。
介面儘量小,但是要有限度。
為依賴介面的類定製服務,只暴露給呼叫的類它需要的方法,它不需要的方法則隱藏起來。
提高內聚,減少對外互動,writeless methods,do more things.
(5) 迪米特法則:一個物件應該對其他物件保持最少的理解。
類與類之間的關係越密切,耦合度越大,當一個類發生改變時,對另一個類的影響也越大。迪米特法則就是為了實現低耦合。
怎麼在程式設計中體現:
只與直接的朋友通訊,我們稱出現成員變數、方法引數、方法返回值中的類為直接的朋友,而出現在區域性變數中的類則不是直接的朋友。也就是說,陌生的類最好不要作為區域性變數的形式出現在類的內部。
(6) 開閉原則:對擴充套件開放,對修改關閉。
單一職責原則:職責單一。
里氏替換原則:不要破壞繼承體系結構。
依賴倒置原則:面向介面程式設計
介面隔離原則:設計介面時要精簡單一。
迪米特原則:降低耦合
者五個原則都是開源原則的注意事項,開閉原則是一切程式設計的出發點和目的。
設計模式雖好,但是也要有個度,避免過度設計的危險。