UML類圖 類圖定義規則 屬性和方法前加上(+、-、#、留空)分別代表:公開(public)、私有(private)、保護(protected)、預設(default) 方法括弧內為參數類型,冒號後為返回值類型 下劃線表示 靜態(static),斜體表示 抽象(abstract) 類圖關係表示法 其 ...
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());
}
責任鏈模式
定義:多個處理者按序連接,每個處理者決定是否處理請求、是否調用後序。