總覽
https://www.jianshu.com/p/198342409641
1,訪問者模式:
訪問者模式是不改變對象的定義,但允許新增不同的訪問者,來定義新的操作。一般運用於一組穩定的數據結構,但可以有不同的操作來作用於這個結構中的元素。
https://www.cnblogs.com/wangbin2188/p/15160633.html
橫看成嶺側成峰,遠近高低各不同
2,觀察者模式
資料1
https://blog.csdn.net/CSDN2497242041/article/details/120403205
資料2
https://www.cnblogs.com/ysocean/p/15627036.html
對象間一種一對多的依賴關系(注冊),使得每當一個對象改變狀態,則所有依賴於它的對象都會得到通知並自動更新(通知)
3,解釋器模式
給定一個語言,定義它的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。
https://www.runoob.com/design-pattern/interpreter-pattern.html
關鍵在於這里
@Override public boolean interpret(String context) { return expr1.interpret(context) && expr2.interpret(context); }
它並不是方法的遞歸,而是調用其他類的實現
4,迭代器模式:提供一種方法順序訪問一個聚合對象中各個元素, 而又無須暴露該對象的內部表示。iterator就是迭代器模式
https://www.runoob.com/design-pattern/iterator-pattern.html
5,備忘錄模式:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。這樣以后就可將該對象恢復到原先保存的狀態。
https://www.runoob.com/design-pattern/memento-pattern.html
6,中介者模式:
用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。
https://www.runoob.com/design-pattern/mediator-pattern.html
7,命令模式
將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日志,以及支持可撤消的操作
https://www.runoob.com/design-pattern/command-pattern.html
8,責任鏈模式
使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這些對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象處理它為止。
https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html
https://doc.wendoc.com/b3f16c74abc225542c01e7d96fd4b98d351399b8a.html
9,策略模式
在策略模式(Strategy Pattern)中,一個類的行為或其算法可以在運行時更改。
https://www.runoob.com/design-pattern/strategy-pattern.html
10,狀態模式
在狀態模式(State Pattern)中,類的行為是基於它的狀態改變的
https://www.runoob.com/design-pattern/state-pattern.html
關鍵代碼:
public void doAction(Context context) { context.setState(this); }
11,模板方法模式
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
https://www.runoob.com/design-pattern/template-pattern.html
12,享元模式
在有大量對象時,有可能會造成內存溢出,我們把其中共同的部分抽象出來,如果有相同的業務請求,直接返回在內存中已有的對象,避免重新創建。主要用於減少創建對象的數量,以減少內存占用和提高性能。
https://www.runoob.com/design-pattern/flyweight-pattern.html
顧名思義也就是共享同種屬性的元素對象
private static final HashMap<String, Shape> circleMap = new HashMap<>();
13,組合模式
是用於把一組相似的對象當作一個單一的對象。組合模式依據樹形結構來組合對象,用來表示部分以及整體層次。這種類型的設計模式屬於結構型模式,它創建了對象組的樹形結構。
可以理解為組織架構模式,一個對象,一個list子類集合,形成父子關系
https://www.runoob.com/design-pattern/composite-pattern.html
14,橋接模式
橋接模式的核心意圖就是把類的實現獨立出來,讓他們各自變化。這樣使每種實現的變化不會影響其他實現,從而達到應對變化的目的
https://www.runoob.com/design-pattern/bridge-pattern.html
15,適配器模式
所謂適配器模式是指一種接口適配技術,它可通過某個類來使用另一個接口與之不兼容的類,運用此模式,兩個類的接口都無需改動。
將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。
https://www.runoob.com/design-pattern/adapter-pattern.html
16,外觀模式
為子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
https://www.runoob.com/design-pattern/facade-pattern.html
17,原型模式
用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。
https://www.runoob.com/design-pattern/prototype-pattern.html
private static Hashtable<String, Shape> shapeMap = new Hashtable<String, Shape>();
Shape cachedShape = shapeMap.get(shapeId); return (Shape) cachedShape.clone();
18,建造者模式
將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
https://www.runoob.com/design-pattern/builder-pattern.html
19,單例模式
單例對象能保證在一個JVM中,該對象只有一個實例存在。
分為餓漢式和懶漢式,餓漢式立即加載,懶漢式延遲加載,懶漢式是線程不安全的,在多線程中很容易出現不同步的情況,如在數據庫對象進行的頻繁讀寫操作時.
如何讓懶漢式變得即安全又高效? DCL雙檢查鎖機制
https://www.runoob.com/design-pattern/singleton-pattern.html
20,工廠模式
定義一個創建對象的接口,讓其子類自己決定實例化哪一個工廠類,工廠模式使其創建過程延遲到子類進行
https://www.runoob.com/design-pattern/factory-pattern.html
21,抽象工廠模式
在抽象工廠模式中,接口是負責創建一個相關對象的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供對象。
https://www.runoob.com/design-pattern/abstract-factory-pattern.html
22,裝飾者模式
這種模式創建了一個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。
https://www.runoob.com/design-pattern/decorator-pattern.html
23,代理模式
為其他對象提供一種代理以控制對這個對象的訪問。
https://www.runoob.com/design-pattern/proxy-pattern.html