最終目的:高內聚,低耦合編程
1) 開放封閉原則 (OCP,Open For Extension, Closed For Modification Principle)3d
類的改動是經過增長代碼進行的,而不是修改源代碼。對象
2) 單一職責原則 (SRP,Single Responsibility Principle)blog
類的職責要單一,對外只提供一種功能,而引發類變化的緣由都應該只有一個。繼承
3) 依賴倒置原則 (DIP,Dependence Inversion Principle)接口
依賴於抽象(接口),不要依賴具體的實現(類),也就是針對接口編程。ip
4) 接口隔離原則 (ISP,Interface Segegation Principle)ci
不該該強迫客戶的程序依賴他們不須要的接口方法。一個接口應該只提供一種對外功能,不該該把全部操做都封裝到一個接口中去。虛擬機
5) 里氏替換原則 (LSP, Liskov Substitution Principle)it
任何抽象類出現的地方均可以用他的實現類進行替換。實際就是虛擬機制,語言級別實現面向對象功能。
6) 優先使用組合而不是繼承原則(CARP,Composite/Aggregate Reuse Principle)
若是使用繼承,會致使父類的任何變換均可能影響到子類的行爲。
若是使用對象組合,就下降了這種依賴關係。
7) 迪米特法則(LOD,Law of Demeter)
一個對象應當對其餘對象儘量少的瞭解,從而下降各個對象之間的耦合,提升系統的可維護性。例如在一個程序中,各個模塊之間相互調用時,一般會提供一個統一的接口來實現。這樣其餘模塊不須要了解另一個模塊的內部實現細節,這樣當一個模塊內部的實現發生改變時,不會影響其餘模塊的使用。(黑盒原理)
案例圖
開閉原則案例
依賴倒轉
1)
2)
迪米特法則
1)和陌生人說話
2)不和陌生人說話
3) 與依賴倒轉原則結合 某人和 抽象陌生人說話 讓某人和陌生人進行解耦合