1 綜述
在Java中對象與對象的關系總體分為四類,分別是:依賴、關聯、聚合和組合。
(1)依賴(Dependency)關系是類與類之間的聯接。依賴關系表示一個類依賴於另一個類的定義,一般而言,依賴關系在Java語言中體現為局域變量、方法的形參,或者對靜態方法的調用。
(2)關聯(Association)關系是類與類之間的聯接,它使一個類知道另一個類的屬性和方法。關聯可以是雙向的,也可以是單向的。在Java語言中,關聯關系一般使用成員變量來實現
(3)聚合(Aggregation) 關系是關聯關系的一種,是強的關聯關系。聚合是整體和個體之間的關系
(4)組合(Composition) 關系是關聯關系的一種,是比聚合關系強的關系。它要求普通的聚合關系中代表整體的對象負責代表部分對象的生命周期,組合關系是不能共享的
2 依賴:
個類A使用到了另一個類B,而這種使用關系是具有偶然性的、、臨時性的、非常弱的,但是B類的變化會影響到A
class A{ public void fun_A(){ ........ } } class B{ //使用參數方式發生與A的依賴關系 public void fun(A a){ a.fun_A(); } //使用創建對象的方式與A發生依賴關系 public void fun(){ A a = new A(); a.fun_A(); } }
3 關聯:
關聯是一種“擁有”的關系。表現在代碼上,就是一個類包含另一個類的實例,通常表現為被關聯類以類屬性的形式出現在關聯類的類定義中,也可以表現為關聯類引用了一個類型為被關聯類的全局變量。關聯可以使單向的,也可以使雙向的。依賴和關聯的區別在於依賴是使用,關聯是擁有.
class A{ public void fun_A(){ ............ } } class Person{ private A a ; public Person(A a){ this.a = a ; } public void work(){ a.fun_A() ; } }
4 聚合
聚合是關聯關系的一種,它是一種強關聯關系(has-a);聚合關系是整體和個體/部分之間的關系;關聯關系的兩個類處於同一個層次上,而聚合關系的兩個類處於不同的層次上,一個是整體,一個是個體/部分;在聚合關系中,代表個體/部分的對象有可能會被多個代表整體的對象所共享;表現在代碼層面上就是在構造器初始化時將兩個類關聯起來。代碼如下
class A{ } class B{ private A a ; //與上面關聯的代碼不同之處在於構造B時必須同時構造B,也就是說B是A的不可缺少的一部分 public B(A a){ this.a = a ; } }
5 組合
組合也是關聯關系的一種(is-a),但它是比聚合關系更強的關系.組合關系要求聚合關系中代表整體的對象要負責代表個體/部分的對象的整個生命周期;組合關系不能共享;在組合關系中,如果代表整體的對象被銷毀或破壞,那么代表個體/部分的對象也一定會被銷毀或破壞,而聚在合關系中,代表個體/部分的對象則有可能被多個代表整體的對象所共享,而不一定會隨着某個代表整體的對象被銷毀或破壞而被銷毀或破壞;
class A{ ........... } class B{ private A a; public B(){ a = new A() ; } }
6 聚合與耦合
與上面幾個不同,這兩對概念主要是強調的設計中類之間的關系。
聚合(Cohesion)是一個模塊內部各成分之間相關聯程度的度量。首先,聚合是對一個模塊內部的度量,這也是許多情況下我們把聚合稱之為內聚的原因。第二,這里出現的模塊是廣義的模塊,它可能是子系統,可能是功能模塊,也可能是功能模塊中的某一個類。從不同的層次看,聚合的程度也會有所不同。第三,模塊的成分包括模塊的行為和狀態。要做到高聚合,那么模塊內部的行為必須要與模塊的內部狀態緊密關聯。通俗來講,一個模塊僅完成一個獨立的功能,模塊內部不存在與該功能無關的操作或狀態。
耦合(Couping)是模塊之間相關聯程度的度量。相對於聚合的內向性,耦合關注的是某一模塊和其他模塊之間的關聯性。我們所追求的低耦合,就是將兩個模塊之間的關聯盡可能的降低,一個模塊發生變化對於其他模塊的影響盡可能的小。
0