这篇文档写晚了,应该在“设计模式-六大设计原则-汇总”前才好。
以后会逐渐把UML也整理成文章。
(右键图片以新的TAB页打开看更清晰)
‘+’表示public
‘-’表示private
‘#’表示protected
继承关系:空心三角形+实线来表示。比如鸟和动物。
实现接口:空心三角形+虚线来表示。比如大雁和飞翔。
关联关系:实现箭头来表示。一个类A需要“知道”另一个类B的变化,B是变化的。比如企鹅和气候的关系,企鹅需要了解到气候的规律,在企鹅类A中需要引用到气候类B的对象。公司案例:job中需要关联监听binlog放入mq队列的对象/集合,其他比如apollo配置等监听对象也算。
class A{
private B b;
}
依赖关系:虚线箭头来表示。比如动物要有生命力,就需要依赖氧气、水以及食物等。同上图所示。(注意一下,这里的几个要素并不是一个“整体”的关系,按“块”来划分。)公司案例:springboot项目启动时,需要依赖mysql、redis、es、apollo等的配置类。
组合关系:实心的菱形+实现箭头来表示。组合/合成/复合是一种强的”拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期是一样的,内部对象和外部对象相独立,生命周期与属主相同,有相同的关系,有相同的关系组成的结构。初始化时,各个类同时生成(相对来说是同时初始化。除了构造方法还有别的吗?)。比如鸟的类A(整体)中,需要实例化翅膀类B(部分)(可能会有多个)。公司案例:比如利用GRPC或THRIFT进行转发消息时,各种消息对象需要一起组装到转发对象中。
class A{
private B b;
public A(){
b = new B();
}
}
聚合关系:空心的菱形+实现箭头来表示。聚合表示一种弱的”拥有”关系,体现的是对象A可以包含B对象,但B对象不是A对象的一部分,生命周期与属主不同,内部对象和外部对象相独立,聚合关系之间一般能互相替换。比如雁群A和大雁数组B的关系。公司案例:比如maven各个项目之间的聚合依赖关系。
class A{
private B[] b;
}