如下內容摘自《Java與模式》數組
在類與類之間,會有連線指明它們之間的關係。類和類、類和接口、接口和接口之間能夠創建如下幾種關係:通常化關係、關聯關係、聚合關係、合成關係和依賴關係,這幾種關係都是靜態的。spa
通常化關係 翻譯
通常化(Generalization)關係表示類與類之間的繼承關係,接口與接口之間的繼承關係,或類對接口的實現關係。通常化的關係是從子類指向父類的,或從實現接口的類指向被實現的接口,與繼承或實現的方向相反,以下圖所示。3d
通常化關係在Java語言中能夠直接翻譯爲關鍵字extends(泛化)和implements(實現)。前者描述類與類之間、接口與接口之間的通常化關係,後者描述與接口之間的通常化關係。code
關聯關係對象
關聯(Association)關係是類與類之間的聯接,它使一個類知道另外一個類的屬性和方法。關聯能夠是雙向的,也能夠是單向的。雙向的關聯能夠有兩個箭頭或者沒有箭頭。單向的關聯有一個箭頭,表示關聯的方向,以下圖所示。單向的關聯更爲廣泛,一般不鼓勵使用雙向的關聯。blog
在Java的語言裏,關聯關係是使用實例變量實現的。好比在上面的Driver類中,就出現了一個類型爲Car的實例變量,這個變量實現了這兩個類之間的關聯關係。每個關聯都有一個名字,在上面的例子裏,關聯的名字是Driver。繼承
每個關聯都有兩個端點,每個端點均可以有一個角色名,顯示出關聯的本質。一個關聯能夠有一個方向箭頭,代表遍歷或者查詢的方向。接口
在每個關聯的端點,還能夠有一個基數(Multiplicity),代表這一端的類能夠有幾個實例。好比,唐僧和他的徒弟造成一個關聯關係,在這個關聯裏面,唐僧只能有一個,而徒弟能夠有好幾個,以下圖所示。生命週期
一個關聯關係每每能夠進一步肯定爲聚合關係或者合成關係。好比唐僧與他的徒弟的關係就能夠進一步肯定爲聚合關係。
聚合關係
聚合(Aggregation)關係是關聯關係的一種,是強的關聯關係。聚合是總體和個體之間的關係。例如,汽車類與引擎類、輪胎類,以及其餘的零件類之間的關係即是總體和個體的關係。一個汽車對象是由一個引擎對象、四個輪胎對象組成的,以下圖所示。
與關聯關係同樣,聚合關係也是經過實例變量實現的。以上面的例子爲例,Car類中應當有一個類型爲Engine的屬性和一個類型爲Tire的數組屬性。可是,關聯關係所涉及的兩個類是處在同一層次上的,而在聚合關係中,兩個類是處在不平等層次上的,一個表明總體,另外一個表明部分。
關聯與聚合僅僅從Java語法上是分辨不出的,須要考察所涉及的類之間的邏輯關係。若是不是很肯定一個關係是否是聚合關係,能夠將之設置爲關聯關係。
合成關係
合成(Composition)關係是關聯關係的一種,是比聚合關係強的關係。它要求普通的聚合關係中表明總體的對象負責表明部分的對象的生命週期,合成關係是不能共享的。
表明總體的對象須要負責保持部分對象的存活,在一些狀況下負責將表明部分的對象湮滅掉。表明總體的對象能夠將表明部分的對象傳遞給另外一個對象,由後者負責此對象的生命週期。聚合關係和合成關係的類圖以下圖所示。
在上面的類圖中,顯示了MonkeyKing以及他的四肢(Limb)和他的金箍棒(GoldRingedStaff)之間的關係。能夠看出,MonkeyKing與GoldRingedStaff之間是聚合關係;而MonkeyKing與Limb之間的關係比前者更強,是合成關係,由於MonkeyKing的四肢徹底有他本身負責,而且不能共享。
若是不能肯定一個關係是否是合成關係,能夠將之設置爲聚合關係,甚至是關聯關係。
依賴關係
依賴(Dependency)也是類與類之間的鏈接,依賴老是單向的。依賴關係表示一個類依賴於另外一個類的定義。一我的(Person)能夠買車(Car)和房子(House),Person類依賴於Car類和House類,以下圖所示。
在上面的例子裏,Person類依賴於Car類和House類的定義,由於Person類引用了Car和House。與關聯關係不一樣的是,Person類裏並無Car和House類型的屬性,Car和House的實例是以參量的方式傳入到buy()方法中去的。其源代碼以下所示。
public class Person{ public void buy(Car car){ .... } public void buy(House house){ .... } }
通常而言,依賴關係在Java語言中體現爲局域變量、方法的參量,以及對靜態方法的調用。換言之,若是一個方法的參量是另外一個類B的實例,那麼這個方法所在的類A依賴於類B。若是類A調用另外一個類B的靜態方法,那麼類A依賴於類B。
若是類B出如今類A的實例變量中,那麼類A與類B的關係就超越了依賴關係,,而變成了某一種關聯關係。
每個依賴關係均可以有一個名字。在上面的例子裏,兩個依賴關係的名字都是Buys。