在進行一個OO系統設計時候我們需要根據系統的需求來抽象出一些類,並且設計類與類之間的關系,也就是我們常說的業務建模,設計優良的類間關系是實現我們常說的“高內聚,低耦合”系統的前提條件,這里我就來梳理下面向對象中類與類有哪幾種關系和它們的使用場景。
繼承(泛化Generalization)
1.概念
指的是一個類(稱為子類、子接口)繼承另外的一個類(稱為父類、父接口)的功能,在Java中使用extends關鍵字實現,如果繼承的父類是抽象類,並且父類中有抽象方法,抽象方法必須在子類(這里子類是非抽象類,如果是抽象類可以不必實現)中實現,在Java中一個子類只能繼承一個父類。
2.圖例
3.代碼
https://github.com/lanhei/DesignPattern/tree/master/src/com/lanhei/relation/generalization
實現(Realization)
1.概念
指的是一個類實現一個接口的功能,在Java中一個類可以實現多個接口,使用implements作為關鍵字。
2.圖例
3.代碼
https://github.com/lanhei/DesignPattern/tree/master/src/com/lanhei/relation/realization
依賴(Dependency)
1.概念
指兩個相對獨立的對象,當一個對象負責構造另一個對象的實例,或者依賴另一個對象的服務時,這兩個對象之間主要體現為依賴關系。在Java中,類A當中使用了類B,其中類B是作為類A的方法參數、方法中的局部變量、或者靜態方法調用。
2.圖例
3.代碼
https://github.com/lanhei/DesignPattern/tree/master/src/com/lanhei/relation/dependency
關聯(Association)
1.概念
指一個類的實例A使用另外一個類的實例B,這兩個對象之間為關聯關系,關聯關系分為單項關聯和雙向關聯。在Java中,單向關聯表現為:類A當中使用了類B,其中B作為類A的成員變量。雙向關聯表現為:類A當中使用了類B作為成員變量;同時類B中也使用了類A作為成員變量。
2.圖例
3.代碼
https://github.com/lanhei/DesignPattern/tree/master/src/com/lanhei/relation/association
聚合(Aggregation)
1.概念
聚合關系是關聯關系的一種,耦合度強於關聯,他們的代碼表現是相同的,僅僅是在語義上有所區別:關聯關系的對象間是相互獨立的,而聚合關系的對象之間存在着包容關系,他們之間是“整體-個體”的相互關系。
2.圖例
3.代碼
https://github.com/lanhei/DesignPattern/tree/master/src/com/lanhei/relation/aggregation
組合(Compostion)
1.概念
相比於聚合,組合是一種耦合度更強的關聯關系。存在組合關系的類表示“整體-部分”的關聯關系,“整體”負責“部分”的生命周期,他們之間是共生共死的;並且“部分”單獨存在時沒有任何意義。
2.圖例
3.代碼
https://github.com/lanhei/DesignPattern/tree/master/src/com/lanhei/relation/compostion