天天看點

設計模式中類的關系之組合關系(Composition)

      組合也是關聯關系的一種特例,它展現的是一種contains-a的關系,這種關系比聚合更強,也稱為強聚合;它同樣展現整體與部分間的關系,但此時整體與部分是不可分的,它們具有統一的生存期,整體的生命周期結束也就意味着部分的生命周期結束,部分對象與整體對象之間具有同生共死的關系,組合關系中的部分,是不能在整體之間進行共享的。比如人和眼睛,當然,有人會說現在醫學發達,眼睛可以移植給别人,如果是這樣的話,你可以了解人和眼睛的關系為聚合,這都是在具體的場景下來确定的。表現在代碼層面,和關聯關系是一緻的,隻能從語義級别來區分。

      在組合關系中,成員類是整體類的一部分,而且整體類可以控制成員類的生命周期,即成員類的存在依賴于整體類。  在UML中,組合關系用帶實心菱形的直線表示。

      UML示例圖如下所示:

設計模式中類的關系之組合關系(Composition)

      示例代碼如下(完整代碼見附件):

      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對象的生命周期也同樣結束了。

      源碼下載下傳   傳回目錄

循自然之道,撫浮躁之心