设计模式前篇——对象关系及UML类图符号

1、综述类之间的关系:

UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition)等。


2.关系简述:

依赖:一个类A中的某个方法参数为另一个类B,则认为A 依赖B

泛化:类的继承关系  , A extends B 

实现:实现类和接口关系,A implements B

关联:一个类作为另一个类的属性而存在  A: - b:B ( 表示private B b;)

      单向关联:

      双向关联:两个类互为对方的属性

      自关联:一个类的属性为其自身,比如常见的 单例模式的 单例属性,比如 链表数据结构

      多重关联:一个类中包含另一个类的集合属性

组合:关联关系的一种,强关联关系,即拥有关系,不能单独存在,比如 人和头颈躯干肢体的关系,创建人的同时,必须同时创建 头颈躯干和四肢,生命周期 同生共死

聚合:关联关系的一种,弱关联关系,即包含关系,部分可单独存在, 比如汽车和 引擎的关系,引擎engine 实例可以在其他地方被new出来,作为汽车的构造器或者方法参数


多重关联关系:

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

例如:一个界面(Form)可以拥有零个或多个按钮(Button),但是一个按钮只能属于一个界面,因此,一个Form类的对象可以与零个或多个Button类的对象相关联,但一个Button类的对象只能与一个Form类的对象关联,如图所示:

设计模式前篇——对象关系及UML类图符号


 

聚合关系示例:

public class Car {
    private Engine engine;
    //构造注入
    public Car(Engine engine) {
        this.engine = engine;
    }
 
    //设值注入
public void setEngine(Engine engine) {
    this.engine = engine;
}
……
}
public class Engine {
    ……
}

 

组合关系示例:

public class Person{
    private Head head;
    private Neck neck;
    private Body body;
    private List<Limbs> limbsList;
     
    public Person(){
        head = new Head();
        neck = new Neck();
        body = new Body();
        limbsList = new ArrayList<>;
    }
}

 

3.UML类图综合关系

设计模式前篇——对象关系及UML类图符号




参考:
UML边看边记 之 类与类之间的关系

UML类图符号以及各种关系

《大话设计模式》