定義:就一個類而言,應該僅有一個引發他變化的緣由。設計
若是一個類的職責太多,就等於把這些職責耦合到一塊兒。一個職責的變化,可能會消弱或抑制這個類完成其餘職責的能力。這種耦合會致使脆弱的設計,當變化發生時,設計會遭受到意想不到的破壞。對象
軟件設計真正要作的許多內容就是發現職責並把職責分離,若是你可以想到多餘一個的動機去改變一個類,那麼這個類就具備多餘一個的職責。接口
軟件實體能夠擴展,可是不能夠修改。基礎
在最初編寫代碼時,先假設變化不會發生。當發生變化後,咱們就建立抽象來隔離之後可能發生同類的變化。擴展
面對需求,程序的改動是經過增長新代碼進行的,而不是更改現有的代碼。軟件
拒毫不成熟的抽象和抽象自己同樣重要。程序
一、高層模塊和底層模塊都應該依賴抽象。底層
二、細節也依賴抽象。
子類可以替換父類型。
只有當子類能夠替換掉父類,軟件單位功能不受影響時,父類才能正真的被複用,而子類也能在父類的基礎上正價新的行爲。
因爲子類型的可替換性才使得使用父類類型的模塊在無需修改的狀況下就能夠擴展。
程序中全部的依賴關係都是終止於抽象類或者接口,就是面向對象的設計。