聚合关系是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系,此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。比如计算机与CPU、公司与员工的关系等。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
在聚合关系中,成员类是整体类的一部分,即成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。在UML中,聚合关系用带空心菱形的直线表示。
UML示例图如下所示:

示例代码如下(概要,完整源码见附件):
Computer.m文件
1 #import "Computer.h"
2
3 @implementation Computer
4 @synthesize centralProcessingUnit = _centralProcessingUnit;
5
6 - (id)initWithCpu:(CentralProcessingUnit *)cpu
7 {
8 self = [super init];
9
10 if (self != nil)
11 {
12 self.centralProcessingUnit = cpu;
13 }
14 return self;
15 }
16
17 - (void)dealloc
18 {
19 [_centralProcessingUnit release];
20
21 NSLog(@"Computer dealloc");
22
23 [super dealloc];
24 }
25
26 @end
调用代码:
1 CentralProcessingUnit *centralProcessingUnit = [[CentralProcessingUnit alloc] init];
2
3 Computer *computer = [[Computer alloc] initWithCpu:centralProcessingUnit];
4
5 // computer生命周期结束
6 [computer release];
7
8 // centralProcessingUnit还可以进行其他操作.....
9
10 [centralProcessingUnit release];
从调用代码我们可以看到,我们创建了一个独立的centralProcessingUnit对象,然后将这个对象传入了Computer的init函数。当computer对象生命周期结束的时候,centralProcessingUnit对象如果还有其他指向它的引用,是可以继续存在的。也就是说,它们的生命周期是相对独立的。
源码下载 返回目录
循自然之道,抚浮躁之心