1.開閉原則
2.單一原則
3.代替原則
4.依賴原則
5.接口隔離原則
6.最少原則
7.合成/聚合複用原則編程
開閉原則:
程序的設計應該是不約束擴展,即擴展開放,但又不能修改已有功能,即修改關閉。由於在軟件生命週期內,常常會出在原有功能基礎上擴展新功能。這時,不能由於軟件已經上線,不擴展新功能,但也不能直接修改舊的功能。正確的作法是,在原有功能上,擴展一個新的功能,新的需求依賴新的功能去實現。這樣就既保證了老功能不受影響,有擴展了新功能。開閉原則一條很是重要的原則,能夠說其它原則的基石。spa
單一原則
就一個類而言,應該僅有一個引發它變化的緣由。具體說,在作編程的時候,很天然的會給一個類加上各類各樣的功能。這樣意味着,不管任何需求要來,都須要更改這個類,這樣實際上是很糟糕的,維護麻煩,複用不可能,也缺少靈活性。若是一個類承擔的職責過多,就等於把這些職責耦合起來,一個職責變化可能會削弱或者抑制這個類完成其餘職責的能力。這種耦合會致使設計很脆弱,當變化發生時,設計會遭到不少意想不到的破壞。設計
代替原則(里氏代換原則):
派生類(子類)對象可以替換其基類(父類)對象被調用。這條原則主要是說,在程序中,任何調用基類對象實現的功能,均可以調用派生類對象來替換,固然,反過來是不行的。其實這裏主要說的是繼承問題,既然派生類繼承基類,那它的對象也應該相應繼承基類對象的實現,固然也就因該能替換基類對象。若是沒法替換,就說明這個派生類繼承有問題,須要修改設計。對象
依賴倒轉原則:
這條原則說的是程序設計應該依賴抽象接口,而不該該依賴具體實現。常常聽到的接口編程思想,其實說的主要就是這個原則。道理也很簡單,接口是穩定的,實現是不穩定的。這也要求,一旦接口肯定,就不該該再進行修改了。而根據接口的實現,是能夠根據具體問題和狀況,採用不一樣的手段去實現。繼承
接口隔離原則:
接口隔離是說,使用多個隔離接口,比使用單個接口要好,仍是一個下降類之間耦合度的意思。常常提到的下降耦合,下降依賴,主要也是經過這個原則來達到的。該原則的優點:1.避免接口污染;2.提升靈活性;3.提供定製服務;4.實現高內聚。接口
1.避免接口污染:一個類若是要實現一個接口,那麼就要實現這個接口要求的全部方法,若是這個接口裏麪包含這個類不須要的方法,那麼就會形成接口污染,這是很差的設計,會對系統留下隱患。生命週期
2.提升靈活性:一個類是能夠同時實現多個接口的,因此將一個臃腫的接口分割爲若干個小接口,經過小接口的不一樣組合能夠知足更多的需求。ci
3.提供定製服務:咱們在作系統設計時也須要考慮對系統之間或模塊之間的接口提供定製服務。提供定製服務就必然有一個需求:只提供訪問者須要的方法。這也是能夠經過細化接口實現的。同步
4.實現高內聚:下面會講解 高內聚原則。io
最少原則(迪米特法則)
一個實體應當儘量少的與其餘實體之間發生相互做用。這樣作的目的在於減小依賴,獨立功能,以便更好的複用。
合成/聚合複用原則:
在一個新的對象裏面使用一些已有的對象,使之成爲新對象的一部分,新的對象經過這些對象的委派達到複用已有功能的目的。設計原則是:儘可能使用合成/聚合,儘可能不要使用繼承。
依賴(Dependency):
依賴關係是類與類之間的聯接。依賴關係表示一個類依賴於另外一個類的定義。例如,一我的(Person)能夠buy(car)和buy(House),Person類依賴於Car類和House類的定義,由於Person類引用了Car和House。與關聯不一樣的是,Person類裏並無Car和House類型的屬性,Car和House的實例是以參量的方式傳入到buy()方法中去的。通常而言,依賴關係在Java語言中體現爲局域變量、方法的形參,或者對靜態方法的調用。能夠簡單的理解,就是一個類A使用到了另外一個類B,而這種使用關係是具備偶然性的、、臨時性的、很是弱的,可是B類的變化會影響到A;好比某人要過河,須要借用一條船,此時人與船之間的關係就是依賴;表如今代碼層面,爲類B做爲參數被類A在某個method方法中使用;
關聯(Association):
關聯關係是類與類之間的聯接,它使一個類知道另外一個類的屬性和方法。關聯能夠是雙向的,也能夠是單向的。在Java語言中,關聯關係通常使用成員變量來實現。 它體現的是兩個類、或者類與接口之間語義級別的一種強依賴關係,好比我和個人朋友;這種關係比依賴更強、不存在依賴關係的偶然性、關係也不是臨時性的,通常是長期性的,並且雙方的關係通常是平等的、關聯能夠是單向、雙向的;表如今代碼層面,爲被關聯類B以類屬性的形式出如今關聯類A中,也多是關聯類A引用了一個類型爲被關聯類B的全局變量;
組合 和 聚合 的區別:
一、依賴性區別
聚合中的兩種類(或實體)是能夠單獨存在的,不會相互影響;被關聯的一方能夠獨立於關聯一方,依賴性不強。
相反,組合中的兩個實體(或者類)是高度依賴於彼此的,它們之間會相互影響。
二、關係類型的區別
聚合表明了has-a關係,一種單向關係,好比:錢包有錢,但錢裏面沒有錢包;組合表明了part-of關係,好比:人須要心臟,心臟也須要人體。
三、關聯強度的不一樣
聚合是一種弱關聯關係;組合是一種強關聯關係。
四、生命週期的不一樣
在聚合關係中的兩個類(或實體)的生命週期是不一樣步;但,在組合關係中的兩個類(或實體)的生命週期是同步的。
耦合度:組合 > 聚合 > 關聯 > 依賴