六大原則:
開閉(擴展而不修改),單一職責(只有一個原因改變類的狀態(tài)),最少知道(減少耦合),替換(父子繼承,子類可替換父類),依賴倒轉(依賴抽象),接口隔離(最小接口)
1.策略模式,主要用于解決有多種數據類型或者角色需要以不同的邏輯處理,為每一種類型(角色)綁定自己匹配的邏輯方法,當有新增的類型和處理邏輯時,只需要簡單的新增,并綁定就可以,不需要對原有的代碼做修改。
2.工廠模式,通過傳入的參數,定制的初始化不同的子類實例。
3.代理模式,代理者和被代理者通過實現相同的接口來保持相同的性質,為代理者設置不同的被代理者,可以靈活的變化接口邏輯。
4.單例(多例)模式。。。
5.抽象工廠模式,相對于簡單工廠模式,由于需要創(chuàng)建的對象有更多的性質,簡單模式無法滿足多種類型的制造,所以將通用的創(chuàng)建方法抽象出來,由子類工廠實現具體的制造邏輯(感覺可以和模板方法模式結合)。
6.門面模式,將復雜的處理過程分裝在一個執(zhí)行類中,提供給外界單一的接口,調用者不必關心細節(jié),擴展(修改)過程也會比較方便,用到的原則:“最少知道”,“開閉”
7.適配器模式,初始的開發(fā)階段一般不會應用到該模式,在后續(xù)的功能擴展(或接入其他的服務、數據),存在參數格式或者接口不匹配的時候,相當于加一個中間層,來適配兩者
8.模板方法模式,一般存在于有繼承關系的場景中,模板方法,即可以通用的接口,在抽象類中定義通用的方法(調用抽象方法的順序),而在子類中各自實現抽象方法的邏輯,基于最少知道原則,可以將抽象方法設為protect
9.建造者模式,相對于簡單工廠模式,建造者適用于更復雜的對象的創(chuàng)建中,將組件的創(chuàng)建和組裝分離分為builder和director,而工廠模式封裝了全部的創(chuàng)建過程
10.橋梁模式
存在一種場景,一種類型中,整體的邏輯不變,但是其中的性質(業(yè)務類型)會變化,所以把兩者分開,將變化的東西抽象出來,按需求組合。否則,每一種性質都整體生成新的類,維護困難。
11.命令模式
主要有命令類,執(zhí)行類,為外界封裝了需要的命令,調用者不需要知道操作的細節(jié),涉及開閉原則,最少知道,單一職責,接口隔離,替換,依賴倒轉
12.裝飾模式
通過組合方式,避免了單用繼承產生的強關聯缺點,分為裝飾類和核心業(yè)務類,裝飾類繼承了核心類的抽象接口,又通過組合方式持有核心實現類(核心業(yè)務類),可以靈活的裝飾不同的裝飾類,搭配成不同的處理邏輯,涉及開閉,依賴倒轉,組合復用,單一職責,里式替換
13.迭代模式
java.lang包的集合類中有廣泛的使用,通過一個迭代類去訪問整個數據結構,最少知道原則
14.組合模式
應用于樹狀結構的初始化中,分為composite和leaf類型,抽象出info等共有的接口和composite(branch)特有的接口,單一職責,接口隔離,里式替換。。。
15.觀察者模式,觀察者和被觀察者,被觀察者持有觀察者對列(listener),當被觀察者執(zhí)行相關的方法時觸發(fā)響應的listener(考慮當觀察者很多時異步化)
16.責任鏈模式,鏈式,串行處理
17.訪問者模式,不同的訪問者,獲取被訪問者不同的內容
18.狀態(tài)模式,狀態(tài)機和狀態(tài)抽象,
19.原型模式,通過原型clone,用于new時需要更大的代價(如io,網絡,磁盤)
20.中介者模式,當多個類之間相互緊密耦合,添加中介者解開類之間的耦合,使類都只依賴于中介者,會導致中介者邏輯復雜,相對更龐大。
21.解釋器模式,java就有解釋運行模式,類似的性質
22.享元模式,減少細粒度的實例(當存在很多區(qū)別很小的實例時),抽象出相同的性質
23.備忘錄模式