设计模式总结(一) 类之间的关系

让人想犯罪 __ 提交于 2019-12-18 15:41:58

类之间的关系

(一)关联关系

关联关系(Association)是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一对象之间有关系,如汽车和轮胎、师傅和徒弟、班级和学生等。

1.双向关联

默认情况下,关联是双向的。例如,顾客(Class14)购买商品(Class15)并拥有商品;反之,卖出的商品总有某个顾客与之相关联。
该关联关系如下图所示,用无箭头实线表示。
在这里插入图片描述

2.单向关联

关联也可以是单向的。例如,顾客(Class1)拥有地址(Class2),则顾客类与地址类具有单向关联关系。
该关联关系如下图所示,用带箭头实线表示。
在这里插入图片描述

3.自关联

存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。例如,一个节点类的成员又是节点对象。
该关联关系如下图所示,用带箭头实线指向自身表示。
在这里插入图片描述

4.多重性关联

也称为重数性关联关系,表示一个类的对象与另一个类的对象连接的个数,可以在关联直线上增加一个数字表示与之对应的另一个类的对象的个数。例如,一个界面对象(Class16)可以拥有多个按钮对象(Class17),而一个按钮只能对应一个界面。
该关联关系如下图所示,用带箭头实线且线上标有数字表示。
在这里插入图片描述

表示方式 多重性说明
1..1 表示另一个类的一个对象只与一个该类对象有关系
0..* 表示另一个类的一个对象与零个或多个该类对象有关系
1..* 表示另一个类的一个对象与一个或多个该类对象有关系
0..1 表示另一个类的一个对象没有或只与一个该类对象有关系
m..n 表示另一个类的一个对象与最少m、最多n个该类对象有关系(m≤n)

5.聚合关系

表示一个整体与部分的关系。如,一台计算机包含显示器、主机、键盘、鼠标等部分,就可以使用聚合关系来描述整体与部分之间的关系,且部分成员为可脱离整体独立存在,例如,汽车发动机(Class3)是汽车(Class4)的组成部分。
该关联关系如下图所示,用带空心菱形的实线表示。
在这里插入图片描述

6.组合关系

与聚合关系类似,表示部分与整体的关系,但是组合关系中,成员对象与整体具有统一的生命周期,即整体存在部分成员就存在,整体不在,部分成员也不存在。例如,人的头(Class6)和嘴巴(Class5),嘴巴是头的一部分,而且头没了,嘴巴也就没了,所以该关系可以用组合关系表示。
该关联关系如下图所示,用带实心菱形的实线表示。
在这里插入图片描述

(二)依赖关系

依赖关系(Dependency)为一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物需要使用到其他事物的时候使用依赖关系。例如,驾驶员开车,在Driver类(Class7)的drive()方法中将Car类型(Class8)的对象car作为一个参数传递,以便在drive()方法中能够调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,因此类Drive依赖类Car。
该关联关系如下图所示,用带箭头虚线表示。
在这里插入图片描述

public class Drive
{
	public void drive(Car car)
	{
		car.move();
	}
	...
}
public class Car
{
	public void move
	{
		...
	}
	...
}

(三)泛化关系

泛化关系(Generalization)也就是继承关系,泛化关系主要描述父类与子类之间的关系,父类又称为基类或超类,子类又称为派生类。例如,猫类(Class9)是动物类(Class10)的子类,即猫类继承了动物类。
该关联关系如下图所示,用带空心三角形实线表示。
在这里插入图片描述

(四)接口与实现关系

实现关系(Realization),在该关系中,类实现了接口,类中的操作实现了接口中所声明的操作。例如,定义一个工具操作类接口Interface1,现让类Class11实现该接口。
该关联关系如下图所示,用带空心三角形实线表示。
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!