定義編程
一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。模塊應該儘可能在不修改原代碼的狀況下進行擴展函數
注意事項spa
1.經過接口或者抽象類約束擴展,對擴展進行邊界限定,不容許出如今接口或抽象類中不存在的public方法。設計
2.參數類型、引用對象儘可能使用接口或者抽象類,而不是實現類對象
3.抽象層儘可能保持穩定,一旦肯定不容許修改。繼承
定義接口
就一個類而言,應該僅有一個引發它變化的緣由,通俗的說,即一個類只負責一項職責,應該僅有一個引發它變化的緣由部署
定義擴展
依賴倒轉原則是程序要依賴於抽象接口,不要依賴於具體實現,要針對接口編程,不要針對實現編程。重構
定義
客戶端不該該依賴它不須要的接口。即便用多個專門的接口,而不使用單一的總接口。每個接口應該承擔一種相對獨立的角色,很少很多,不幹不應乾的事,該乾的事都要幹。
另外一種定義是:類間的依賴關係應該創建在最小的接口上。
接口隔離原則將很是龐大、臃腫的接口拆分紅更小具體的接口,這樣客戶只須要知道他們感興趣的方法。
接口隔離原則的目的是系統解開耦合,從而容易重構、更改和從新部署。
核心思想
不該該強迫客戶程序依賴他們不須要使用的方法。
優勢
1.下降耦合性
2.提升代碼的可讀性
3.隱藏實現細節
注意事項
1. 使用接口隔離原則拆分接口時,首先必須知足單一職責原則,將一組相關的操做定義在一個接口中,且在知足高內聚的前提下,接口中的方法越少越好。
2. 能夠在進行系統設計時採用定製服務的方式,即爲不一樣的客戶端提供寬窄不一樣的接口,只提供用戶須要的行爲,而隱藏用戶不須要的行爲
3.不能違反單一職責原則
定義
要儘可能使用合成和聚合,儘可能不要使用繼承
就是在一個新的對象裏面使用一些已有的對象,使之成爲新對象的一部分;新的對象經過向這些對象的委派達到複用已有功能的目的
實現方式
在面向對象的設計裏,有兩種基本的方法能夠在不一樣的環境中複用已有的設計和實現,即經過組合或經過繼承。
也稱爲最小知道原則
定義
通俗的來說,就是一個類對本身依賴的類知道的越少越好。也就是說,對於被依賴的類來講,不管邏輯多麼複雜,都儘可能地的將邏輯封裝在類的內部,對外除了提供的public方法,不對外泄漏任何信息
強調要點
1.從被依賴者的角度來講:只暴露應該暴露的方法或者屬性(最少知道原則),即在編寫相關的類的時候肯定方法/屬性的權限
2.從依賴者的角度來講,只依賴應該依賴的對象(只和最直接的朋友打交道)
定義
任何基類能夠出現的地方,子類必定能夠出現。
當知足繼承的時候,父類確定存在非私有的成員,子類確定是獲得了父類的這些非私有成員(假設,父類的成員所有是私有的,那麼子類沒辦法從父類繼承任何成員,也就不存在繼承的額概念了)。既然子類繼承了父類的這些非私有成員,那麼父類對象也就能夠在子類對象中調用這些非私有成員。因此,子類對象能夠替換父類對象的位置。
在里氏帶環原則下,當需求有變化時,只需繼承,而別的東西不會改變。因爲里氏代換原則才使得開放封閉稱爲可能。這樣使得子類在父類無需修改就能夠擴展。