1.單一職責原則
1.降低類的複雜度,一個類隻做一件事(這樣類就用的多)
2.如果邏輯簡單,方法不多,類可以不用遵守單一,但是方法上一點要遵守單一職責
2.接口隔離原則
A類通過接口去依賴B類,大的接口拆分小的接口,去依賴小的接口
1.多個接口,多個方法,普通類實作多個接口,以及重寫方法
2.普通類裡,不同名的方法,參數裡面傳不同的接口名
3.A a = new A()
a.方法(new B())調用直接傳接口的實作類
3.依賴倒轉原則(找一個中間人)
1.高層子產品不能依賴底層子產品,都應該要依賴抽象
2.中心思想是面向接口程式設計(使用接口抽象是規範)
案例:
一個QQ類接收電子郵箱,接收方法裡面傳電子郵箱對象
上面比較容易想到如果我們擷取的對象是徵信,短信等等,則新增類,同時Perons也要增加相應的接收方法
優化思路:
引入一個抽象的接口 Receiver,表示接收者,這樣 Person類與接口工 Receiver發生依賴因為Emai1, Weixin等等屬于接收的範圍,他們各自實作 Treceiver接口就ok,這樣我們就符号依賴倒轉原則
4.裡氏替換原則
聚合,組合,依賴來解決繼承問題
5.開閉原則,前面的都是為了這個
類,子產品應該對提供方擴充開發,對修改關閉(使用方),用抽象構造架構,實作擴充細節
增加代碼,不是修改
6.迪米特法則
最少知道原則,核心是降低類之間的耦合.
直接的朋友,隻要二個對象之間是朋友關系,例如依賴,關聯,組合,聚合.
方法傳回值,參數,成員變量中的類是直接朋友.
方法裡的局部變量(對象)不是朋友,違法了迪米特法則
了解:不要把自己的對象寫在别人的方法裡面,應該把自己對象寫在自己類中的方法封裝
别人的方法通過參數調用此方法
7.合成複用
原則盡量使用合成/聚合,不要用繼承
1.聚合是成員變量,整體與部分可以分開
2.關聯是成員變量一對一,一對多.類與類之間的聯系
3.合成是類中的成員對象,整體和部分不可分離,同生共死
4.組合和合成相同,唯一的差別是項目中進行級聯删除,删除A,B也一起删除,那麼AB就是組合
三種類型
1.建立型模式:解決建立對象
2.結構性模式:解決類之間的問題
3.行為性模式:解決方法的問題