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

          关联关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系。它体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友。这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的,关联可以是单向、双向的。表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。

          在UML类图中,用实线连接有关联的对象所对应的类,在使用JavaC#C++等编程语言实现关联关系时,通常将一个类的对象作为另一个类的属性。

          1.双向关联。

          默认情况下,关联是双向的,双向的关联可以有两个箭头或者没有箭头。

          2.单向关联。

          类的关联关系也可以是单向的,单向关联用带箭头的实线表示。

          单向关联和双向关联的UML示例图如下所示::

     

          【说明】:上图中,TeacherStudent是双向关联,Teacher有多名StudentStudent也可能有多名Teacher(两个类连线下面的*表示多对多的关系)。但StudentCourse间的关系为单向关联,一名Student可能有多门Course,课程是个抽象的东西,因此不拥有Course

          单向关联和双向关联的示例代码如下(TeacherStudent类的定义)

      Teacher.h文件:

    1 @class Student;
    2 @interface Teacher : NSObject
    3 {
    4     Student     *_student;
    5 }
    6 
    7 @property (nonatomic, retain) Student *student;
    8 
    9 @end

          Student.h文件:

     1 #import "Course.h"
     2 
     3 @class Teacher;
     4 @interface Student : NSObject
     5 {
     6     Teacher     *_teacher;
     7     Course      *_course;
     8 }
     9 
    10 @property (nonatomic, retain) Teacher *teacher;
    11 @property (nonatomic, retain) Course *course;
    12 
    13 @end

          【注意】:可能大家注意到了,在Student类的定义中,包含Course类用的是:#import "Course.h";而包含Teacher类用的是:@class Teacher;。这是因为Teacher类和Student是双向关联,如果直接用import,那么在编译的时候,编译器会报错,至于@class#import的区别,在后面会进行介绍。

          3.自关联。

          在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。比如我们在数据结构中描述树结构,会建一个节点Node类,Node类有一个指针父节点也是Node类型。

     

          源码下载   返回目录

  • 相关阅读:
    215. Kth Largest Element in an Array
    B:魔兽世界之一:备战
    218. The Skyline Problem
    编程作业: 编程作业—类和对象
    239. Sliding Window Maximum
    313. Super Ugly Number
    hdu3068 manacher模板题
    fzu1901 kmp
    hdu2609 最小表示法
    hdu3374 kmp+最小表示法
  • 原文地址:https://www.cnblogs.com/eagle927183/p/3449050.html
Copyright © 2011-2022 走看看