1.單一原則。一個類應該有且只有一個變化的緣由。單一職責原則將不一樣的職責分離到單獨的類,每個職責都是一個變化的中心。需求變化時,將經過更改職責相關的類來體現。若是一個類擁有多於一個的職責,則多個職責耦合在一塊兒,會有多於一個緣由來致使這個類發生變化。一個職責的變化可能會影響到其餘的職責,另外,把多個職責耦合在一塊兒,影響複用性。編程
2.里氏替換原則,就是要求繼承是嚴格的is-a關係。全部引用基類的地方必須能透明地使用其子類的對象。在軟件中將一個基類對象替換成它的子類對象,程序將不會產生任何錯誤和異常,反過來則不成立,若是一個軟件實體使用的是一個子類對象的話,那麼它不必定可以使用基類對象。例如:我喜歡動物,那我必定喜歡狗,由於狗是動物的子類;可是我喜歡狗,不能據此判定我喜歡動物,由於我並不喜歡老鼠,雖然它也是動物。設計模式
3.依賴倒置原則。依賴倒置原則的核心就是要咱們面向接口編程,理解了面向接口編程,也就理解了依賴倒置。低層模塊儘可能都要有抽象類或接口,或者二者都有。變量的聲明類型儘可能是抽象類或接口。ide
4.接口分離原則。一個類對另外一個類的依賴應該創建在最小的接口上,通俗的講就是須要什麼就提供什麼,不須要的就不要提供。接口中的方法應該儘可能少,不要使接口過於臃腫,不要有不少不相關的邏輯方法。測試
5.多用組合(has-a),少用繼承(is-a)。若是新對象的某些功能在別的已經建立好的對象裏面已經實現,那麼應當儘可能使用別的對象提供的功能,使之成爲新對象的一部分,而不要再從新建立。能夠下降類與類之間的耦合程度。設計
6.開閉原則。對修改關閉,對擴展開放。在軟件的生命週期內,由於變化,升級和維護等緣由須要對軟件原有代碼進行修改,可能會給舊代碼引入錯誤,也有可能會使咱們不得不對整個功能進行重構,而且須要原有代碼通過從新測試。解決方案:當軟件須要變化時,儘可能經過擴展軟件實體的行爲來實現變化,而不是經過修改已有的代碼來實現。不過這要求,咱們要對需求的變動有前瞻性和預見性。其實只要遵循前面5中設計模式,設計出來的軟件就是符合開閉原則的。對象