java的聚合
① java中類與類之間的關系
類與類之間最常見的關系主要有三種:依賴(uses-a)、聚合(has-a)和繼承(is-a)。
下面以在線書店訂單系統為例,來詳細的講述這三種關系的概念。
在線書店訂單系統的主要功能是:注冊用戶可以登錄到網上書店選購圖書,在線填寫訂單,並支付購書款。書店確認已經收到購書款時,按用戶留下的地址郵寄圖書。可以在這個系統中建立幾個類,有圖書(book)、賬戶(account)、訂單(order)、地址(address)等,如下圖所示:
繼承
繼承就是一個類能調用另一個類的所有數據成員,並在當前類中不需要再重新定義,本章已經講得很明白了。
② java 聚合和組合的區別
組合:部分與整體是與生俱來的,部分的存在依賴於整體。比如人與人的某個器官,人一出生,器官就在,人死亡,器官也就沒了意義。
聚合:你與你的電腦(或者其它物品),電腦是屬於你的吧,但是你是一出生就擁有了電腦嗎,電腦是某個廠商生產出來的,然後你買過來才成為了你的一部分。你死了以首舉灶後,電腦也可以送給別人繼續用啊!這就不叫做其存亡了,所以這是聚合。
這個是結合我之前看過的設計模式所想到的,如果你了解過設計模式,則會更容易明白我說的是什麼了,比如有一種設計模式叫做責任鏈者扮模式,責任鏈中的處理者往往是先創建出來,然後再把引用傳到另一個責任處理對象作為責任接班人,這就用答冊到了聚合的思想吧。
另外,《thinking inJava》裡面是這樣說的,「composing a new class from existing classes, this concept is called composition (if the composition happens dynamically, it's usually called aggregation)」。
意思是通過現在的類組合成一個新的類,叫做組合,如果這種組合是動態的,則叫聚合。如何理解」動態「,也就是可以隨時加進來也可以隨時刪除,拿上面的人與電腦的例子來說,電腦可以隨時扔掉,也可以隨時加進來,人的生命不會受到威脅,但是人如果少了某個器官,則會危及到生命了!其實現實中的例子與Java中的概念還是有一點出入,類比只能是接近真相。