hooyantsing's Blog

P26 类的关联、聚合和组合

字数统计: 377阅读时长: 1 min
2020/11/07

尚硅谷Java设计模式(图解+框架源码剖析)

关联关系

关联关系实际上就是类与类之间的联系,他是依赖关系的特例

单向一对一关系
1
2
3
4
classDiagram
class Person
class IDCard
IDCard "1"<--"1" Person
双向一对一关系
1
2
3
4
classDiagram
class Person
class IDCard
IDCard "1"--"1" Person

聚合关系

表示的是整体和部分的关系,整体和部分可以分开。他是关联关系的特例

可以分开,就是聚合。不可分开,就是组合

1
2
3
4
5
6
7
8
9
10
11
public class Computer {
private Mouse mouse;
private Monter monter;

public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
public void setMonter(Monter monter) {
this.monter = monter;
}
}
1
2
3
4
5
6
7
8
9
classDiagram
class Computer{
-Mouse mouse
-Moniter moniter
}
class Mouse
class Moniter
Computer o-- Mouse
Computer o-- Moniter

组合关系

组合关系,也是整体与部分的关系,但是整体与部分不可以分开

认为Mouse、Monitor和Computer是不可分离的,则升级为组合关系

1
2
3
4
5
6
7
8
9
10
public class Computer {
private Mouse mouse = new Mouse();
private Monitor monitor = new Monitor();
}

public class Client {
public static void main(String[] args) {
Computer computer = new Computer();
}
}
1
2
3
4
5
6
7
8
9
classDiagram
class Computer{
-Mouse mouse
-Moniter moniter
}
class Mouse
class Moniter
Computer *-- Mouse
Computer *-- Moniter
聚合和组合关系辨析

如果在程序中Person实体中定义了对IDCard进行联级删除,即删除Person时连同IDCard一起删除,那么IDCard和Person就是组合了(两个对象同生共死)

1
2
3
4
5
6
7
8
public class Person {
private IDCard card; // 聚合关系,人不一定持有身份证
private Head head = new Head(); // 组合关系,人一定不能没有脑袋

public void setIDCard(IDCard card) {
this.card = card;
}
}
CATALOG
  1. 1. 关联关系
    1. 1.1. 单向一对一关系
    2. 1.2. 双向一对一关系
  2. 2. 聚合关系
  3. 3. 组合关系
    1. 3.1. 聚合和组合关系辨析