一、策略模式:算法
策略模式就是將可以通用的算法,封裝成不一樣的組件,實現同一個接口,使之能夠互換。數據庫
例子:SpringMVC的9大組件,都採用策略模式。好比HandlerMethodArgumentResolver,有很是多不一樣的實現類,這些實現類均可以互相替換來處理不一樣類型的參數,這就是策略模式。設計模式
策略模式與模板方法模式的區別:好比一個抽象類有一個抽象方法,每一個實現該抽象方法的具體實現都不一樣,就是模板方法模式,通常在抽象類中會有邏輯處理,只是用到了抽象的模板方法時,交給具體的子類去不一樣實現。緩存
若是一個模板方法,被子類實現時,實現方式大都相同,好比模板方法爲處理字符(10個子類可能只有兩種實現,一種是處理爲UTF-8,一種是處理成GBK),那麼這個模板方法就應該使用策略模式。框架
二、觀察者模式:ide
觀察者模式就是將「觀察者」註冊給「被觀察者」,當被觀察者發生改變時,可以及時的通知全部觀察者。性能
例子:好比listener或者事件觸發等,都是觀察者模式this
三、裝飾者模式:spa
裝飾者模式就是在沒必要改變原類文件和使用繼承的狀況下,動態的擴展對象的的功能。好比你有一個真實對象,有一個包裝對象,兩個對象都必須實現同一個接口A;可是在進行包裝的時候,包裝對象須要引用真實對象,而後在真實對象的基礎上進行功能擴展,最後返回的都是接口A的對象。可是已經被包裝過了,擴展了功能。設計
例子:Java裏面的Inputstream與OutputStream就是典型的裝飾者模式。
四、工廠方法模式
工廠方法模式就是定義一個建立對象的接口,裏面有一個建立對象的方法。經過繼承或者實現,將對象的建立交給子類。而調用者只用使用接口就能夠了,不用關心具體的對象是怎麼建立出來的。
五、抽象工廠模式
抽象工廠模式就是定義一個爲建立一組(多個)相關或者相依賴的對象的接口,而調用者無需關心具體的建立對象的實現類。
工廠方法模式與抽象工廠模式的區別:當抽象工廠模式定義的接口中只能建立一個對象,那麼「抽象工廠模式」就退化成爲了「工廠方法模式」。
六、單例模式
單例模式這個就很少說了,哈哈,地球人都知道。
七、命令模式
命令模式就是把請求封裝成命令對象,「調用者」就是將「命令對象」傳遞給「處理對象」。
八、適配器模式
適配器模式就是將一個接口轉換成爲另外一個接口。
九、外觀模式
外觀模式提供了一個統一的接口,用來訪問系統中的一羣接口。外觀模式定義了一個高層接口,讓使用變得更加容易(不用再去調用一羣接口,外觀接口已經將一羣接口封裝好了)。
十、模板方法模式
模仿方法模式定義一個操做中算法的框架,而將一些步驟延遲到子類中,使得子類能夠不改變算法的結構便可重定義該算法中的某些特定步驟。
(讓子類來實現具體的抽象方法)
十一、迭代器模式
迭代器模式就是Iterator接口,使得客戶能夠順序得訪問對象中的各個元素,又不暴露對象內部的細節。
十二、組合模式
當你將對象的組合(多個對象)組成樹結構來展示,那麼無論你這個對象是節點(還包含子節點),仍是葉子節點(不包含子節點),均可以用一致的方式進行處理。
1三、狀態模式
狀態模式是指當前對象把處理本身不一樣狀態的的行爲對象,都封裝成爲本身的屬性。當狀態發生改變時,調用不一樣的行爲對象,執行不一樣的操做。(看起來就好像類發生了改變同樣)
1四、代理模式
爲另外一個對象提供一個替身或佔位符以訪問這個對象(包裝一個對象,並控制對它的訪問)
1五、複合模式
複合模式結合兩個或以上的模式,組成一個解決方案,解決一再發生的通常性問題。(MVC模式就是典型的符合模式;其中Model是觀察者模式,發生改變後通知View;View是組合模式,經過各類不一樣的組件嵌套組成一個完整的View展示用戶界面;Controller是策略模式,不一樣的View可使用不一樣的Controller處理不一樣的業務)
1六、橋接模式
1七、建造者(生成器)模式
將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。Spring裏面的FactoryBean就是建造者模式
1八、責任鏈模式
使多個對象都有機會處理請求,從而避免了請求的發送者和接收者之間的耦合關係。將這些對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有對象處理它爲止。(責任鏈就是一個鏈表結構,頭結點處理完成之後再決定是否要交由下一個節點繼續處理,直到沒有下一個節點或者其中對象終止責任鏈)
1九、蠅量模式(享元模式)Flyweight Pattern
享元模式嘗試重用現有的同類對象,若是未找到匹配的對象,則建立新對象。
應用實例: JAVA 中的 String,若是有則返回,若是沒有則建立一個字符串保存在字符串緩存池裏面。
20、解釋器模式
2一、中介者模式
中介者模式(Mediator Pattern)是用來下降多個對象和類之間的通訊複雜性。這種模式提供了一箇中介類,該類一般處理不一樣類之間的通訊,並支持鬆耦合,使代碼易於維護。中介者模式屬於行爲型模式。
2二、備忘錄模式
備忘錄模式(Memento Pattern)保存一個對象的某個狀態,以便在適當的時候恢復對象。備忘錄模式屬於行爲型模式。
應用實例: 一、後悔藥。 二、打遊戲時的存檔。 三、Windows 裏的 ctri + z。 四、IE 中的後退。 四、數據庫的事務管理。
2三、原型模式
原型模式(Prototype Pattern)是用於建立重複的對象,同時又能保證性能。這種類型的設計模式屬於建立型模式,它提供了一種建立對象的最佳方式。
應用實例: 一、細胞分裂。 二、JAVA 中的 Object clone() 方法。三、Java序列化與反序列化能夠實現深度克隆
2四、訪問者模式
訪問者模式擁有訪問者類,與被訪問元素類。元素類經過接受訪問者類對象,而且將自身的引用交給訪問者,這樣訪問者就可使用元素類。
/** *ComputerPart就是被訪問的元素 *ComputerPart經過accept方法接收訪問者 *ComputerPartVisitor就是訪問者 */ public interface class ComputerPart { public void accept(ComputerPartVisitor computerPartVisitor); } /** *Keyboard就是被訪問的元素 *Keyboard實現ComputerPart接口,經過accept方法接收訪問者 *Keyboard經過回調訪問者computerPartVisitor的visit方法,將自身對象*傳給訪問者,訪問者即可以使用被訪問的元素了 */ public class Keyboard implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } }