在设计模式中类与类之间的关系主要有6种:依赖、关联、聚合、组合、继承、实现,它们之间的耦合度依次增加。
一、继承关系
继承是一种“is-a”关系。
继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议性。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口,是类和类之间存在父子关系。
二、实现关系
实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性。在UML类图设计中,实现用一条带空心三角箭头的虚线表示,从类指向实现的接口。 一个类实现一个或多个接口的方法,接口定义好操作的集合,由实现类去完成接口的具体操作
三、依赖关系
简单的理解,依赖就是一个类A使用到了另一个类B,
对于两个相对独立的对象,当一个对象依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
而这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A。比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖。表现在代码层面,为类B作为参数被类A在某个method方法中使用。在UML类图设计中,依赖关系用由类A指向类B的带箭头虚线表示。 依赖关系是五种关系中耦合最小的一种关系。
一个类是另一个类的方法局部变量,方法的参数或方法返回值。
依赖是指类之间的调用关系,在UML中用带虚线的箭头表示。如果类A访问类B的属性或方法或者类A负责实例化类B则类A依赖类B,无须在类A中定义类B类型属性
四、关联关系
关联体现的是两个类之间语义级别的一种强依赖关系,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。关联可以是单向、双向的。表现在代码层面,为被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。在UML类图设计中,关联关系用由关联类A指向被关联类B的带箭头实线表示,在关联的两端可以标注关联双方的角色和多重性标记。
对于两个相对独立的对象,当一个对象与另一个对象有种某种对应关系,这两个对象之间为关联关系,比如老师和学生。关联分为单向关联,双向关联和自身关联,实现方法一般是A中包含B的某个指针或者引用。类A与类B的实例之间存在特定的对应关系,在UML中用带实线的箭头表示。如果类A与类B关联,类A含有B的属性
按照类之间的数量对比,关联可以分为3种: