zoukankan      html  css  js  c++  java
  • 设计模式中类的关系之聚合关系(Aggregation)

          聚合关系是关联关系的一种特例,它体现的是整体与部分的关系,即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对象,然后将这个对象传入了Computerinit函数。当computer对象生命周期结束的时候,centralProcessingUnit对象如果还有其他指向它的引用,是可以继续存在的。也就是说,它们的生命周期是相对独立的。

     

          源码下载   返回目录

     

  • 相关阅读:
    无刷电机控制基本原理
    SPI 串行Flash闪存W25Q128FV 的使用(STM32F407)_软件篇
    CAN总线简介
    RS-232串口特性
    PLSQL 安装教程
    JS 常用正则表达式备忘录
    JS数组去重
    Js中Map对象的使用
    JS操作字符串
    前端小技巧
  • 原文地址:https://www.cnblogs.com/eagle927183/p/3449074.html
Copyright © 2011-2022 走看看