標籤:alt view 序列 裝飾者模式 oar 迭代器 複合 img 中介者模式
1、策略模式:
策略模式就是將能夠通用的演算法,封裝成不同的組件,實現同一個介面,使之可以互換。
例子:SpringMVC的9大組件,都採用策略模式。比如HandlerMethodArgumentResolver,有非常多不同的實作類別,這些實作類別都可以互相替換來處理不同類型的參數,這就是策略模式。
策略模式與模板方法模式的區別:比如一個抽象類別有一個抽象方法,每個實現該抽象方法的具體實現都不同,就是模板方法模式,一般在抽象類別中會有邏輯處理,只是用到了抽象的模板方法時,交給具體的子類去不同實現。
如果一個模板方法,被子類實現時,實現方式大都相同,比如模板方法為處理字元(10個子類可能只有兩種實現,一種是處理為UTF-8,一種是處理成GBK),那麼這個模板方法就應該使用原則模式。
2、觀察者模式:
觀察者模式就是將“觀察者”註冊給“被觀察者”,當被觀察者發生改變時,能夠及時的通知所有觀察者。
例子:比如listener或者事件觸發等,都是觀察者模式
3、裝飾者模式:
裝飾者模式就是在不必改變原類檔案和使用繼承的情況下,動態擴充項物件的的功能。比如你有一個真實對象,有一個封裝對象,兩個對象都必須實現同一個介面A;但是在進行封裝的時候,封裝對象需要引用真實對象,然後在真實對象的基礎上進行功能擴充,最後返回的都是介面A的對象。但是已經被封裝過了,擴充了功能。
例子:Java裡面的Inputstream與OutputStream就是典型的裝飾者模式。
4、Factory 方法模式
Factory 方法模式就是定義一個建立對象的介面,裡面有一個建立對象的方法。通過繼承或者實現,將對象的建立交給子類。而調用者只用使用介面就可以了,不用關心具體的對象是怎麼建立出來的。
5、抽象原廠模式
抽象原廠模式就是定義一個為建立一組(多個)相關或者相依賴的對象的介面,而調用者無需關心具體的建立對象的實作類別。
Factory 方法模式與抽象原廠模式的區別:當抽象原廠模式定義的介面中只能建立一個對象,那麼“抽象原廠模式”就退化成為了“Factory 方法模式”。
6、單例模式
單例模式這個就不多說了,哈哈,地球人都知道。
7、命令模式
命令模式就是把請求封裝成命令對象,“調用者”就是將“命令對象”傳遞給“處理對象”。
8、適配器模式
適配器模式就是將一個介面轉換成為另一個介面。
9、面板模式
面板模式提供了一個統一的介面,用來訪問系統中的一群介面。面板模式定義了一個高層介面,讓使用變得更加容易(不用再去調用一群介面,外觀介面已經將一群介面封裝好了)。
10、模板方法模式
模仿方法模式定義一個操作中演算法的架構,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟。
(讓子類來實現具體的抽象方法)
11、迭代器模式
迭代器模式就是Iterator介面,使得客戶可以順序得訪問對象中的各個元素,又不暴露對象內部的細節。
12、組合模式
當你將對象的組合(多個對象)組成樹結構來展現,那麼不管你這個對象是節點(還包含子節點),還是葉子節點(不包含子節點),都可以用一致的方式進行處理。
13、狀態模式
狀態模式是指當前對象把處理自己不同狀態的的行為對象,都封裝成為自己的屬性。當狀態發生改變時,調用不同的行為對象,執行不同的操作。(看起來就好像類發生了改變一樣)
14、代理模式
為另一個對象提供一個替身或預留位置以訪問這個對象(封裝一個對象,並控制對它的訪問)
15、複合模式
複合模式結合兩個或以上的模式,組成一個解決方案,解決一再發生的一般性問題。(MVC模式就是典型的符合模式;其中Model是觀察者模式,發生改變後通知View;View是組合模式,通過各種不同的組件嵌套組成一個完整的View展現使用者介面;Controller是策略模式,不同的View可以使用不同的Controller處理不同的業務)
16、橋接模式
17、建造者(產生器)模式
將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。Spring裡面的FactoryBean就是建造者模式
18、責任鏈模式
使多個對象都有機會處理請求,從而避免了請求的寄件者和接收者之間的耦合關係。將這些對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有對象處理它為止。(責任鏈就是一個鏈表結構,頭結點處理完成以後再決定是否要交由下一個節點繼續處理,直到沒有下一個節點或者其中對象終止責任鏈)
19、蠅量模式(享元模式)Flyweight Pattern
享元模式嘗試重用現有的同類對象,如果未找到匹配的對象,則建立新對象。
應用執行個體: JAVA 中的 String,如果有則返回,如果沒有則建立一個字串儲存在字串緩衝池裡面。
20、解譯器模式
21、中介者模式
中介者模式(Mediator Pattern)是用來降低多個對象和類之間的通訊複雜性。這種模式提供了一個中介類,該類通常處理不同類之間的通訊,並支援松耦合,使代碼易於維護。中介者模式屬於行為型模式。
22、備忘錄模式
備忘錄模式(Memento Pattern)儲存一個對象的某個狀態,以便在適當的時候恢複對象。備忘錄模式屬於行為型模式。
應用執行個體: 1、後悔藥。 2、打遊戲時的存檔。 3、Windows 裡的 ctri + z。 4、IE 中的後退。 4、資料庫的交易管理。
23、原型模式
原型模式(Prototype Pattern)是用於建立重複的對象,同時又能保證效能。這種類型的設計模式屬於建立型模式,它提供了一種建立對象的最佳方式。
應用執行個體: 1、細胞分裂。 2、JAVA 中的 Object clone() 方法。3、Java序列化與還原序列化可以實現深度複製
24、訪問者模式
訪問者模式擁有訪問者類,與被訪問元素類。元素類通過接受訪問者類對象,並且將自身的引用交給訪問者,這樣訪問者就可以使用元素類。
/***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); }}
Java--設計模式心得體會