天天看點

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

目錄

第一章 建立型模式

單例模式:

餓漢式:天然的線程安全,效率高。

懶漢式:

雙重檢測鎖模式:

靜态内部類:

枚舉單例:

反射破解除枚舉單例以外的單例模式:

反序列化破解除枚舉單例以外的單例模式:

工廠模式:

簡單工廠模式:

工廠方法模式:

簡單工廠模式與工廠方法模式的對比:

抽象工廠模式:

工廠模式總結:

建造者模式:

原型模式:

淺克隆:

深克隆:

使用序列化和反序列化實作深克隆:

第二章 結構型模式

擴充卡模式:

類配器模式:

對象擴充卡模式:

代理模式:

靜态代理:

動态代理:

橋接模式:

組合模式:

裝飾模式:

IO流的設計是一個典型的裝飾模式:

外觀模式:

享元模式:

第三章 行為型模式

責任鍊模式:

疊代器模式:

中介者模式:

指令模式:

解釋器模式:

通路者模式:

政策模式:

模闆方法模式:

狀态模式:

觀察者模式:

備忘錄模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

第一章 建立型模式

單例模式:

作用:保證一個類隻有一個執行個體,并且提供一個通路該執行個體的全局通路點。

常見的應用場景:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

單例模式的優點:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

餓漢式:天然的線程安全,效率高。

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

懶漢式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

雙重檢測鎖模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

靜态内部類:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

枚舉單例:

枚舉元素本身就是單例。但是他沒有延時加載。可以防止反射和反序列化漏洞。

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

反射破解除枚舉單例以外的單例模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

防止的方法:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

反序列化破解除枚舉單例以外的單例模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

防止的方法:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

反序列化時自動調用readResolve方法。

工廠模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

簡單工廠模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

工廠方法模式:

它與簡單工廠模式最大的不同在于簡單工廠模式隻有一個工廠類,而工廠方法模式有一組實作了相同接口的工廠類。它符合開閉原則,當需要擴充的時候,不用修改已有代碼,隻需要增加。

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

簡單工廠模式與工廠方法模式的對比:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

抽象工廠模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

工廠模式總結:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

建造者模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

原型模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

在使用new産生新對象比較耗時的情況下,我們可以使用clone來進行新對象的建立。

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

淺克隆:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

深克隆:

深克隆其實就是将原對象下面的屬性也進行克隆。

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

使用序列化和反序列化實作深克隆:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

第二章 結構型模式

結構型模型的核心作用是從程式的結構上實作松耦合,進而可以擴大整體的類結構,用來解決更大的問題。

擴充卡模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

類配器模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

對象擴充卡模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

代理模式:

通過代理,控制對對象的通路。可以詳細控制通路某個類或對象的方法,在調用這個方法前做前置處理,調用這個方法後做後置處理,即AOP(Aspect Oriented Programming面向切面程式設計)的微觀實作,進而實作将統一流程代碼放到代理類中處理。

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

靜态代理:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

動态代理:

動态代理相比于靜态代理的優點是:抽象角色中(接口)聲明的所有方法都被轉移到調用處理器一個集中的方法中處理沒這樣,我們可以更加靈活和統一地處理衆多的方法。

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

橋接模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

組合模式:

組合模式适用于:将部分和整體的關系用樹形結構來表示,進而使用戶端可以使用統一的方式處理部分對象和整體對象。

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

裝飾模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

IO流的設計是一個典型的裝飾模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

缺點是會産生很多的小對象,大量小對象占據記憶體,一定程度上影響性能,且裝飾模式易出錯,調試排查比較麻煩。

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

外觀模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

享元模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

測試:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

第三章 行為型模式

責任鍊模式:

将能夠處理同喲類請求的對象連成一條鍊,所送出的請求沿着鍊傳遞,鍊上的對象逐個判斷是否有能力處理該請求,如果能就處理,否則就傳遞給鍊的下一個。

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

疊代器模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

測試:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

中介者模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

指令模式:

将一個請求封裝為一個對象,進而使我們可用不同的請求對客戶進行參數化,對請求排隊或者記錄請求日志,以及支援可撤銷的操作,也稱為“動作Action模式”,“事務transatcion模式”。

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

解釋器模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

通路者模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

政策模式:

對應于解決某一個問題的一個算法族,允許使用者從該算法族中任選一個算法解決某一問題,同僚可以友善地更換算法或者新增算法,并且由用戶端決定調用哪個算法。

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

模闆方法模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

狀态模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

觀察者模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

備忘錄模式:

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式

核心就是儲存某個對象内部狀态的拷貝,這樣以後就可以将該對象恢複到原先的狀态。

16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式
16.Java設計模式 第一章 建立型模式 第二章 結構型模式 第三章 行為型模式