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

          组合也是关联关系的一种特例,它体现的是一种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对象的生命周期也同样结束了。

     

          源码下载   返回目录

  • 相关阅读:
    OAuth2.0介绍
    C#集成FastDFS断点续传
    ABP集成WIF实现单点登录
    CentOS7下搭建FastDfs(V5.11)+Keepalived分布式集群部署
    【算法】之常见的排序算法
    【开发工具
    【C/C++】之C/C++快速入门
    【数据结构】之二叉树(Java语言描述)
    【数据结构】之散列链表(Java语言描述)
    【数据结构】之队列(Java语言描述)
  • 原文地址:https://www.cnblogs.com/eagle927183/p/3449101.html
Copyright © 2011-2022 走看看