常用設計模式總結,附完整圖解
UML類圖
類圖定義規則

屬性和方法前加上(+、-、#、留空)分別代表:公開(public)、私有(private)、保護(protected)、缺省(default)
方法括號內為參數類型,冒號后為返回值類型
下劃線表示 靜態(static),斜體表示 抽象(abstract)
類圖關系表示法

其中 關聯、聚合、組合,比較容易混淆,它們的區別:
關聯:描述的是兩個獨立實體之間的連接,它們可以獨立存在。
聚合:描述的是整體和部分之間的關系,部分可以獨立于整體存在。
組合:描述的是一種更強的整體和部分關系,部分不能獨立于整體存在。
依賴 和 關聯 的主要區別在于:
依賴是臨時性的,而關聯是長期性的。
依賴關系通常表示一個類使用另一個類,而關聯關系表示對象之間的結構關系。
七個原則
開閉原則
對擴展開放,對修改關閉。
即程序要設計成擴展新功能時,只需添加新代碼,而無需修改現有代碼。
里氏替換原則
子類可以當作父類使用,且替換后不改變運行結果。

單一職責原則
一個類只負責一個職責。
依賴倒轉原則
高層模塊不應該依賴底層模塊,抽象不應該依賴于細節。

接口隔離原則
接口應該小而完備,避免大而臃腫。不因該強迫實現類實現不該有的功能。
合成復用原則
在代碼復用時,優先使用組合、聚合、關聯的方式,其次考慮繼承方式。
組合、聚合、關聯、繼承的區別可參考上面《類圖關系表示法》。
最少知道原則(別稱:迪米特法則)
一個類對于其他類知道的越少越好。

擴展:高內聚低耦合
要注意,下圖是以類的角度。從方法的角度來看,方法之間互調頻繁,也是耦合。

創建型
單例模式
1.餓漢式
缺點:類加載后立刻創建對象,較占資源。

2.懶漢式
優點:按需加載。
缺點:使用鎖來保證并發安全,代碼較復雜。

3.內部類式
優點:懶漢式改進版,使用JVM機制取代了鎖,同樣能保證并發安全的情況下,代碼更簡單了。

簡單工廠模式
優點:客戶和具體商品解耦。
缺點:工廠里硬編碼所有商品,每次添加新商品需要修改工廠代碼,違反開閉原則。

工廠方法模式
特點:添加新商品只需新建對應工廠,無需修改其他代碼,符合開閉原則。

抽象工廠模式
特點:每個品牌工廠可以生產多種類型的商品。

建造者模式
定義:將一個對象的建造步驟、順序、細節進行分離。
抽象建造者:定義構建產品的步驟。
具體建造者:實現每個步驟。
指揮者:決定步驟的執行順序。

結構型
代理模式
定義:通過代理類來訪問被代理類。

橋接模式
定義:將抽象與實現分離,使它們都可以獨立地變化。

適配器模式
定義:通過包裝,讓類兼容特定接口。

裝飾器模式
定義:通過包裝,實現功能動態擴展。

行為型
觀察者模式
定義:對象可以被訂閱,并主動通知訂閱者。

策略模式
定義:使策略能動態的切換。

模板方法模式
定義:將可變的方法延遲到子類實現。

狀態模式
定義:把類功能按不同狀態進行分離。

迭代器模式
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
責任鏈模式
定義:多個處理者按序連接,每個處理者決定是否處理請求、是否調用后序。


浙公網安備 33010602011771號