組合也是關聯關系的一種特例,它展現的是一種contains-a的關系,這種關系比聚合更強,也稱為強聚合;它同樣展現整體與部分間的關系,但此時整體與部分是不可分的,它們具有統一的生存期,整體的生命周期結束也就意味着部分的生命周期結束,部分對象與整體對象之間具有同生共死的關系,組合關系中的部分,是不能在整體之間進行共享的。比如人和眼睛,當然,有人會說現在醫學發達,眼睛可以移植給别人,如果是這樣的話,你可以了解人和眼睛的關系為聚合,這都是在具體的場景下來确定的。表現在代碼層面,和關聯關系是一緻的,隻能從語義級别來區分。
在組合關系中,成員類是整體類的一部分,而且整體類可以控制成員類的生命周期,即成員類的存在依賴于整體類。 在UML中,組合關系用帶實心菱形的直線表示。
UML示例圖如下所示:
示例代碼如下(完整代碼見附件):
People.m檔案:
1 #import "People.h"
2
3 @implementation People
4 @synthesize eye = _eye;
5
6 - (id)init
7 {
8 self = [super init];
9 if (self != nil)
10 {
11 _eye = [[Eye alloc] init];
12 }
13 return self;
14 }
15
16 - (void)dealloc
17 {
18 [_eye release];
19
20 NSLog(@"People dealloc");
21
22 [super dealloc];
23 }
24
25 @end
從上面我們可以看到,Eye對象是在People對象裡面建立的,是以在People對象生命周期結束的時候,Eye對象的生命周期也同樣結束了。
源碼下載下傳 傳回目錄
循自然之道,撫浮躁之心