開閉原則html
里氏替換原則java
依賴倒轉原則編程
接口隔離原則設計模式
迪米特法則函數
合成複用原則優化
單一職責原則this
設計原則總得來講仍是爲了讓代碼儘可能的:高內聚、低耦合。提升代碼的擴展性,複用性。實際開發中須要平衡開發效率與代碼設計的量,設計模式使用過多類和方法細分會越多,致使過於臃腫spa
一、開閉原則(Open Close Principle)設計
定義:開閉原則的意思是:對擴展開放,對修改關閉。在程序須要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。簡言之,是爲了使程序的擴展性好,易於維護和升級。htm
分析:抽象化是開閉原則的關鍵。想要達到這樣的效果,咱們須要使用接口和抽象類。
二、里氏代換原則(Liskov Substitution Principle)
定義:全部引用基類(父類)的地方必須能透明地使用其子類的對象。
分析:個人理解就是引用了父類的地方替換成子類不影響代碼運行
使用里氏代換原則須要注意:
1)子類的多有方法必須在父類中聲明,或者子類必須實現父類中聲名的全部方法。
2)儘可能把父類設計成抽象類或接口,讓子類繼承父類或實現父接口。增長一個新功能時,經過增長一個新的子類來實現。
3)java語言編譯時會檢查一個程序是否符合里氏代換原則,但只是一個語法意義上的檢查,有侷限性。
三、依賴倒轉原則(Dependence Inversion Principle)
定義:這個原則是開閉原則的基礎,具體內容:針對接口編程,依賴於抽象而不依賴於具體。
分析:簡單來講,依賴倒轉原則就是指:代碼要依賴於抽象的類,而不要依賴於具體的類;要針對接口或抽象類編程,而不是針對具體類編程。
實現開閉原則的關鍵是抽象化,而且從抽象化導出具體化實現,若是說開閉原則是面向對象設計的目標的話,那麼依賴倒轉原則就是面向對象設計的主要手段。
Spring的DI 就是依賴倒轉原則的一個具體實現
策略模式也遵循依賴倒轉原則
四、接口隔離原則(Interface Segregation Principle)
定義:客戶端不該該依賴那些它不須要的接口。
一旦一個接口太大,則須要將它分割成一些更細小的接口,使用該接口的客戶端僅需知道與之相關的方法便可。
分析:接口隔離原則針對的是接口類,與單一職責原則的區別就是單一原則針對的是實現類,二者區分的維度不同
五、迪米特法則,又稱最少知道原則(Demeter Principle)
定義:
1) 不要和「陌生人」說話。
2) 只與你的直接朋友通訊。
3) 每個軟件單位對其餘的單位都只有最少的知識,並且侷限於那些與本單位密切相關的軟件單位。
分析:也是爲了下降類之間的耦合,增長局部的內聚,加強擴展性。當一個模塊功能獨立時,對其進行修改擴展會更加的容易
在迪米特法則中,對於一個對象,其朋友包括如下幾類:
1) 當前對象自己(this);
2) 以參數形式傳入到當前對象方法中的對象;
3) 當前對象的成員對象;
4) 若是當前對象的成員對象是一個集合,那麼集合中的元素也都是朋友;
5) 當前對象所建立的對象。
任何一個對象,若是知足上面的條件之一,就是當前對象的「朋友」,不然就是「陌生人」。
迪米特法則可分爲狹義法則和廣義法則。在狹義的迪米特法則中,若是兩個類之間沒必要彼此直接通訊,那麼這兩個類就不該當發生直接的相互做用,若是其中的一個類須要調用另外一個類的某一個方法的話,能夠經過第三者轉發這個調用。
狹義的迪米特法則:能夠下降類之間的耦合,可是會在系統中增長大量的小方法並散落在系統的各個角落,它可使一個系統的局部設計簡化,由於每個局部都不會和遠距離的對象有直接的關聯,可是也會形成系統的不一樣模塊之間的通訊效率下降,使得系統的不一樣模塊之間不容易協調。
廣義的迪米特法則:指對對象之間的信息流量、流向以及信息的影響的控制,主要是對信息隱藏的控制。信息的隱藏可使各個子系統之間脫耦,從而容許它們獨立地被開發、優化、使用和修改,同時能夠促進軟件的複用,因爲每個模塊都不依賴於其餘模塊而存在,所以每個模塊均可以獨立地在其餘的地方使用。一個系統的規模越大,信息的隱藏就越重要,而信息隱藏的重要性也就越明顯。
用途在於控制信息的過載:
1)在類的劃分上,應當儘可能建立鬆耦合的類,類之間的耦合度越低,就越有利於複用,一個處在鬆耦合中的類一旦被修改,不會對關聯的類形成太大波及;
2)在類的結構設計上,每個類都應當儘可能下降其成員變量和成員函數的訪問權限;
3)在類的設計上,只要有可能,一個類型應當設計成不變類;
4)在對其餘類的引用上,一個對象對其餘對象的引用應當降到最低。
六、合成複用原則(Composite Reuse Principle)
定義:合成複用原則是指:儘可能使用合成/聚合的方式,而不是使用繼承。
分析:繼承屬於高耦合,沒有組合/聚合方式靈活。使用繼承時須要充分遵循里氏替換原則.
總之就是能用組合/聚合就不用繼承
七、單一職責原則(Single Responsibility Principle, SRP)
定義:類的職責要單一,不能將太多的職責放在一個類中
分析:一個類職責越多,被複用的可能性越小,粒度越小越可能被複用。單一原則是針對實現類的設計模式
參考:https://www.cnblogs.com/WindSun/p/10223080.html