UML 存在的意義
? ? ? 我們在學(xué)習(xí)設(shè)計模式時總會涉及到類與類之間的關(guān)系, 這也會讓人感覺到很抽象, 為了更好滴了解設(shè)計模式中類與類之間的關(guān)系(類與接口之間的關(guān)系), 這時我們就用到了 UML.
UML 的分類
? ? ? 類與類之間大致分為了四種關(guān)系:
? ? ? ① 泛化關(guān)系
? ? ? ② 實現(xiàn)關(guān)系
? ? ? ③ 依賴關(guān)系
? ? ? ④ 關(guān)聯(lián)關(guān)系
一. 泛化關(guān)系
? ? ? 說白了就是繼承, 類與類之間的繼承, 接口與接口之間的繼承:
二. 實現(xiàn)關(guān)系
? ? ? 類與接口之間的關(guān)系, 一個類實現(xiàn)了一個或者多個接口.
三. 依賴關(guān)系
? ? ? Human 類依賴 Ship 類,?依賴關(guān)系是單向的,Ship 的改變會影響到 Human.依賴關(guān)系體現(xiàn)為局部變量拔疚、方法的形參,或者對靜態(tài)方法的調(diào)用.
四. 關(guān)聯(lián)關(guān)系
? ? ? 關(guān)聯(lián)關(guān)系分類就比較多了, 分為:
? ? ? ① 單向關(guān)聯(lián), 雙向關(guān)聯(lián):?關(guān)聯(lián)關(guān)系一般使用成員變量來實現(xiàn).
? ? ? ② 聚合關(guān)系: 也是關(guān)聯(lián)關(guān)系的一種, 是強關(guān)聯(lián)關(guān)系.
? ? ? ③ 組合關(guān)系: 比聚合關(guān)系強的關(guān)聯(lián)關(guān)系.
① 單向關(guān)聯(lián), 雙向關(guān)聯(lián)
? ? ? 單向關(guān)聯(lián)和雙向關(guān)聯(lián)本質(zhì)一樣, 就以單向關(guān)聯(lián)為例: Person 類有一個屬性是 Money 類的, Person 可以獲取到 Money 的屬性和方法, 屬于強依賴關(guān)系, 關(guān)聯(lián)關(guān)系平等.
② 聚合關(guān)系
? ? ? 聚合關(guān)系顧名思義, 聚合在一起的, 兩者之間是整體與個體的關(guān)系, 但是可以分離, 各自有各自的生命周期, SDWebImageManager 類包含 SDImageCache 類, 但 SDImageCache 不是 SDWebImageManager 的組成部分.
③ 組合關(guān)系
組合關(guān)系和聚合關(guān)系有些類似, 不同的是 SDWebImageWebPCoder 是 SDWebImageCodersManager 的一部分, 生命周期相同, SDWebImageWebPCoder 不能脫離 SDWebImageCodersManager 而存在.
ps: 個人感覺關(guān)聯(lián)關(guān)系的辨別比較模糊, 需要結(jié)合具體事件分析來進行判斷.