标签 Java
 标签 UML
 分类 技术文章
 分类 开发工具

设计模式之UML类图

文章封面由代号为g提供

UML类图可以很清晰的表达程序的设计,在程序开发中各种类存在不同的依赖关系,在UML中使用不同的箭头来表达类之间的关系,例如依赖关系关联关系泛化关系实现关系组合关系聚合关系*。

可以使用StartUML工具或者Rose工具来画类图,但是已经2019年啦。我们有强大的IDEA开发工具,我们可以安装插件来画类图,下面就是一个类图。

image-20190712233955913

1.1.依赖关系

依赖关系dependency),在UML类图中使用带普通箭头的虚线表示,如下所示:

image-20190713001756745

  • UserService类中使用啦成员变量UserMapper,故可以描述为UserService依赖UserMapper
  • UserService类中的saveUser(User user)方法参数使用啦User,故可以描述为UserService依赖User
  • UserService类中的getCorp()方法的返回类型是Corp类型,故可以描述为UserService依赖Corp

依赖关系就是一个类A中使用到对方类B,例如私有变量使用B类,方法参数使用B类,构造方法等,那么就可以说是A类依赖B类。在UML类图中就可以使用依赖关系表示。

1.2.泛化关系

泛化关系generalization)也称之为继承关系,是依赖关系的一种特例。在UML类图中使用带实心三角箭头的实线表示,如下所示:

image-20190713002745702

如果A类和B类存在类继承关系,那么在UML类图中就可以使用泛化关系来描述。

1.3.实现关系

实现关系Implementation),是依赖关系的一种特例,在UML类图中使用带实心三角箭头的虚线表示,如下所示:

image-20190713003929571

如果A类实现了B接口,就可以使用实现关系描述。

1.4.关联关系

关联关系association),表示的是类与类之间的联系,是依赖关系的一种特例,在UML类图中使用带普通箭头的实线表示,关联关系中有分为单向关联关系和双向关联关系。如下所示的单向一对一关联关系:

image-20190713143138513

1.5.聚合关系

聚合关系aggregation),表示的是整体与部分之间的关系,属于关联关系的一种特例,所以也具有导航性和多重性,表示的是整体和部分可以分开,例如笔记本和鼠标,笔记本可以离开鼠标,所以他们之间的关系就可以使用聚合关系来描述,在UML类图中使用空心的菱形箭头实线表示的,

1.6.组合关系

组合关系composition),表示的是整体与部分不可分开,例如,人与身份证,合法公民都应该有自己的一个身份证,且不可缺少,所以,他们之间就可以称之为组合关系,在UML类图中使用带实心的菱形箭头的实线表示,如下所示:

image-20190713145211242

1.7.设计模式简介

UML类图是学习和使用设计模式的前提,在设计模式中基本可以概括为23种设计模式

创建型模式,多用于说明如何创建对象:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式,其中单例模式是为了解决如何保证系统中某一个类只有一个实例,原型模式是为类解决对象的拷贝问题。

结构性模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、代理模式等,结构型模式更多的是站在系统设计的角度去考虑问题,例如装饰者模式可以解决类爆炸的问题,在《图解设计模式》有说明。

行为型模式:主要是站在方法的角度上做设计:观察者模式责任链模式、策略模式、解释器模式、命令模式、中介者模式、迭代器模式、状态模式、模版方法模式等等。

目录