最近在学习设计模式,接触最多的就是先用UML类图画出这种设计模式。日常看其余人的博客多多少少也碰到UML类图,毕竟再多的文字,都没有一张图来的直白。掌握UML图其实对与java程序员来讲,仍是颇有必要的。java
类
java中的类咱们最熟悉不过了。好比我新建了一个下面的类程序员
public class Phone { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } protected void call(){ } }
对应的Phone类的UML图为 设计模式
- 图分为三层:最顶层的为类名,中间层的为属性,最底层的为方法
- 属性的表示方式为: 【可见性】 【属性名称】 :【类型】 = {缺省值,可选}
- 方法的表示方式为: 【可见性】 【方法名称】 (【参数列表】):【类型】
- 可见性都是同样的,'-' 表示private、‘+’表示public、‘#’表示protected
继承关系
继承关系是用于描述父子类之间的关系的,父类又称为基类或者超类。子类又称做派生类。( 记得以前看其余人的博客。看到超类。瞬间懵逼了,后来一查,就是父类,因此基础的东西必定要掌握牢固)ide
下面定义个Mi和Oppo函数
public class Mi extends Phone{ private String miVersion; public void hot(){ } } public class Oppo extends Phone { private String oppoVersion; public void beautiful(){ } }
对应的UML类图为 学习
- 泛化关系使用带空心三角形的实现来表示
接口
接口 你们日常常常用到,在接口中一般没有属性this
public interface Language { public void hello(); }
对应的UML类图spa
- 在方法上应当有《interface》,表示是一个接口
实现关系
咱们定义了接口,就去实现接口设计
public class Chinese implements Language { @Override public void hello() { System.out.println("你好"); } } public class English implements Language{ @Override public void hello() { System.out.println("hello"); } }
对应的UML类图code
- 使用空心三角形虚线表示
关联关系
关联关系是类与类 之间最多见的一种关系,它是一种结构化的关系。表示一类对象与另外一类对象之间有联系。关联关系分单向关联、双向关联 、自关联
单向关联
单向关联指的是 关联只有一个方向,好比 咱们程序员拥有电脑
public class Computer { } public class Programmer { private Computer computer; }
对应的UML类图为
双向关联
双向关联的关系就是双向的,好比程序员买电脑 ,反之。电脑也 和程序员关联。这就是双向关联。
public class Computer { private Programmer programmer; } public class Programmer { //程序员不止一台电脑 private Computer[] computer; }
对应的UML类图为
- 有的地方也会使用双向的箭头表示,碰到的时候 不要纠结于这个
自关联
自关联指的就是对象中的属性为对象自己,我首先就想到了单例模式
public class Singleton { //构造函数私有化 private Singleton(){ } private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } }
对应的UML类图为
依赖关系
能够简单理解,就是一个类A使用到了类B.这种使用关系是具备偶然性的、临时性的。可是B的变化会影响到A. 好比,驾驶员(Driver)开车,Driver类的drive()方法将车(Car)的对象做为一个参数传递,以便在drive()方法中可以调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,所以也能够说Driver依赖Car
public interface Car { public void move(); } public class Driver { public void drive(Car car) { car.move(); } }
对应的UML类图为
- 用带箭头的虚线表示
- 依赖关系一般经过三种方式来实现
- 将一个类的对象做为另外一个类中方法的参数
- 在一个类的方法中将另外一个类的对象做为其对象的局部变量
- 在一个类的方法中调用另外一个类的静态方法
聚合关系
聚合关系表示总体与部分的关系,在聚合关系中,成员对象实总体的一部分,可是成员对象能够脱离总体对象独立存在。好比电脑有 cpu,ssd
public class Cpu { } public class Ssd { } public class Computer { private Cpu cpu; private Ssd ssd; public Computer(Cpu cpu, Ssd ssd) { this.cpu= cpu; this.ssd= ssd; } }
对应的UML类图
- 用空心菱形直线表示
- 代码实现聚合关系,成员对象一般以构造方法、Setter方法的方式注入到总体对象之中。
组合关系
组合关系也表示的是一种总体和部分的关系。可是在组合关系中总体对象能够控制成员对象的声明周期,一旦总体对象不存在,成员对象也不存在,有种同生共死的感受。好比人的 头 和嘴巴、鼻子。嘴巴和鼻子是头的组成部分之一,一旦头没了,嘴巴也没有了(好可怕)。
public class Mouth { } public class Nose { } public class Head { private Mouth mouth; private Nose nose; public Head() { mouth = new Mouth(); nose = new Nose(); } }
对应的UML类图
- 用实心菱形直线表示
基本上经常使用的都介绍完了,不过实际应用中,没必要彻底纠结于细节,合理的利用对象之间的关系给出合理的设计方案便可
对了。我先在画图都是用在线的 processon