UML 类图可以更好的帮助我们理解源码组织结构,在 浅析 UML 类图关系 中我们大致描述 UML 类图中常见的 Java 对象间关系,在这里具体化每种关系的具体场景。
文章目录
一、依赖关系
1、概念
-
概念: 依赖关系描述了一种,
类与类之间
一种 使用 与 被使用 的关系 -
具体表现: 依赖关系在 Java 中的具体代码表现形式为:
B 为 A 的构造器或方法中的局部变量
B 为 A方法或构造器的参数
B 为 A方法的返回值
A 调用 B 的静态方法
简单来说,就是 A 类中, 出现了 B 类
2、UML 图表示
UML 类图:通过 虚线 由 依赖类 指向 被依赖类
3、具体场景代码
依据 UML 类图关系,我们可以实现如下场景代码:
public class Pen{
public void write(){
System.out.println("write");
}
public static void fun1(){
System.out.println("static");
}
}
public class People{
private Pen mPen;
//构造器方法参数
public People(Pen mPen){
this.mPen = mPen;
mPen.write();
}
//方法的参数
public void fun1(Pen mPen){
mPen.write();
}
//构造器的局部参数
public People(){
Pen mPen = new Pen();
mPen.write();
}
//方法的局部参数
public void fun1(){
Pen mPen = new Pen();
mPen.write();
}
//方法的返回值
public Pen fun3(){
return mPen;
}
//调用静态方法
public void fun4(){
Pen.fun1();
}
}
二、关联关系
1、概念
关联(Association)关系是类与类之间的联接,它使一个类知道另一个类的属性和方法,也就是说给你两个具有关联关系的类,你可以从一个类的对象得到另外一个类的对象。关联可以是双向的,也可以是单向的。
在 Java 语言中,关联关系一般使用 成员变量 来实现
。
2、UML 图表示
UML 类图表示方法: 通过实线由关联类指向被关联类
3、具体场景代码
a、单向关联
public class People{
private Pen mPen;
public People(Pen mPen){
this.mPen = mPen;
}
public void fun1(){
Log.e("People",mPen.getColor());
}
public void fun2(){
mPen.write();
}
}
public class Pen{
private String mColor;
public void setColor(String mColor){
this.mColor = mColor;
}
public void getColor(){
return mColor;
}
public void write(){
Log.e("TAG","I can write")
}
}
b、双向关联
public class Peole{
private Pen mPen;
....
}
public class Pen{
private People mPeople;
.....
}
c、自关联
public class People{
private People mPeople;
....
}
注意: 依赖和关联的区别: 依赖是使用,关联是拥有
三、聚合关系
###1、概念
- 关联关系的一种,是一种
强关联关系(has-a)
- 聚合关系是 整体 和 部分 之间的关系
关联关系的两个类处于同一个层次上,而聚合关系的两个类处于不同的层次上,一个是整体,一个是个体/部分
;- 在聚合关系中,代表个体/部分的对象有可能会被多个代表整体的对象所共享;
2、UML 类图表示
UML 类图表示方法::实心菱形 + 实线 + 箭头;箭头指向代表个体/部分的对象,也就是被合成/组合的类的对象;
3、具体场景代码
public class Group{
private Student mStudent;
....
}
public class Student{
....
}
四、组合关系
1、概念
- 关联关系的一种,但是这种关系比聚合关系更强
(contains-a)
- 组合关系不能共享
- 在组合关系中,如果代表整体的对象被销毁或破坏,那么代表个体/部分的对象也一定会被销毁或破坏,而聚在合关系中,代表个体/部分的对象则有可能被多个代表整体的对象所共享,而不一定会随着某个代表整体的对象被销毁或破坏而被销毁或破坏;
- 具体体现:在Java 中,组合关系是通过成员变量来实现的
2、 UML 类图
UML 类图表示方法:实心菱形 + 实线 + 箭头,箭头指向代表个体/部分的对象
3、具体场景代码
public class Bird{
private Leg mLeg;
public Bird(){
mLeg = new Leg();
}
}
public class Leg{
}
聚合和组合的区别:
- 聚合是个体离开了整体,依然可以存在。
- 组合是个体和整体不可以分开,个体不能离开整体单独存在。
依赖,关联 和聚合,组合的区别:
- 依赖,关联 : 类之间的关系是在同一层次上。
- *聚合,组合: 类之间的关系表现为整体和部分.
Java 中 组合和继承的区别,在这里就不具体表名了,参看下文链接 –
深入理解Java中的组合和继承