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());
}
責任鏈模式
定義:多個處理者按序連線,每個處理者決定是否處理請求、是否呼叫後序。