依賴 < 關聯 < 聚合 < 組合
1 依賴
語義:a use b。依賴是區域性變數、形參、靜態方法、返回引數
生命週期中物件依賴關係:當f方法被呼叫時,a與b產生依賴關係,當呼叫結束,依賴關係結束
class a
}a 虛線箭頭指向 b
2 關聯
class soldier
}語義:a has b
士兵可以有槍,也可以沒有槍,是一種鬆散的耦合關係。而且士兵可以通過setgun()隨時換一把槍
生命週期中物件依賴關係:士兵和槍各自不負責對方的生命週期,士兵銷毀了槍任然在,槍銷毀了士兵任然在。只不過只有士兵銷毀後,士兵與槍的依賴關係才回解除。策略模式應當典型的關聯(策略可以隨時替換)
a實線箭頭指向b
3 聚合
語義:a owns b
a擁有b的引用,a和b有明顯的從屬關係,但是a任然不負責b的生命週期的管理。b任然可能被其它的物件所引用。
聚合和關聯需要根據具體語義區別,典型例子:
狼群類 和 狼 就是聚合例子。容器list和容器中的元素,應當是一種典型的聚合關係
a 空心菱形連線 b
4 組合
語義:b is a part of b
b需要負責a的生命週期的管理,例如人和人腦:
class person
public person(brain brain)
}人腦在一般情況下,應答完全屬於乙個人。即使使用spring注入人腦,也應該使用構造器注入才合理,使人一旦建立,就是有腦的狀態。這也說明人管理了人腦的宣告週期。
a(person)實心菱形連線 b(heart)
依賴 關聯 聚合 組合 的區別
1.例項化 依賴 a將b作為區域性變數進行使用.程式1 void a foo 2.關聯 a與b存在一定的關係.這裡只考慮單向導航.關聯在 中有多種表現形式.第一種,作為引數 程式2 void a foo b b b b or b b 第二種,作為成員變數 程式3 class a void foo p...
聚合,組合,依賴
1.聚合 是關聯關係的一種特例,體現的是整體與部分擁有的關係,即 has a 的關係,此時整體與部分之間可以分離。cpp view plain copy 學校 class school 學生 class student 可以看到 student 類中包含了乙個 school 類的物件 指標,而且在建...
關聯 聚合 組合
關聯 聚合 aggregation 以及組合 composition 的區別?涉及到uml中的一些概念 關聯是表示兩個類的一般性聯絡,比如 學生 和 老師 就是一種關聯關係 聚合表示 has a 的關係,是一種相對鬆散的關係,聚合類不需要對被聚合類負責,如下圖所示,用空的菱形表示聚合關係 從實現的角...