类图是描述类与类之间关系的示意图,它形象的描述了系统的结构,有助于与更深刻的理解软件的设计思想。
类图中类的关系由强到弱可以分为4种:泛化 ---> 实现 ---> 关联 ---> 依赖。
1. 泛化
关系说明:泛化是一种继承。它指定了子类如何特化父类的所有特征和行为。
代码说明:父类与子类
图例:空心三角形的实线箭头,箭头指向父类
代码:
public class Base{
}
public class BaseExt extends Base{
}
2. 实现
关系说明:实现是一种类与接口的关系,表示类是接口所有特征和行为的实现。
代码说明:实现类和接口
图例:空心三角形虚线箭头,箭头指向接口
代码:
public interface IBase{
public void doSomething();
}
public class BaseImp implements IBase{
@Override
public void doSomething(){
System.out.println("doSomething!");
}
}
3. 关联
关系说明:关联表示类与类之间的拥有关系。即一个类是另一个类的成员。
关联的种类:自关联、单向关联、双向关联、多重关联、聚合、组合等
3.1 自关联
关系说明:一个类包含自己。
代码说明:成员变量
图例:普通实线箭头指向自己
代码:
public class Node {
private Node node;
}
3.2 单向关联
关系说明:一个类包含另一个类的成员,另一个类没有该类的成员
代码说明:成员变量
图例:普通实线箭头指向被关联的类
代码:
public class NodeA{
}
public class NodeB{
private NodeA nodeA;
}
3.3 双向关联
关系说明: 两个类互相包含另一个类的成员。(容易循环引用,造成内存泄漏)
代码说明:成员变量
图例:普通实线,不带箭头
代码:
public class NodeA{
private NodeB nodeB;
}
public class NodeB{
private NodeA nodeA;
}
3.4 多重关联
关系说明:一个类中包含另一个类的多个成员。
代码说明:成员变量
图例:带数量关系说明的实线,不带箭头。
代码:
public class NodeA{
}
public class NodeB{
private NodeA[] nodeAs;
}
3.5 聚合
关系说明:聚合是整体与部分的关系,成员对象是整个对象的一部分,成员对象的可以独立存在。如:轮胎和汽车关系
代码说明:成员变量
图例:带空心菱形的实线箭头,菱形指向整体,箭头指向部分。
代码:
public class Car{
public Tire tire;
}
public class Tire{
}
3.6 组合
关系说明:组合是整体与部分的关系,成员对象是整体的一部分,整体对象控制着成员对象的生命周期,一旦整体不存在,成员对象也不存在。如:人的身体和手
代码说明:成员变量
图例:带实心菱形的实线箭头,菱形指向整体,箭头指向部分
代码:
public class Body{
private Hand hand;
}
public class Hand{
}
4. 依赖
关系说明:依赖表示类与类之间的使用关系。表示一个事物使用另一个事物。
代码说明:局部变量、方法的参数或者对静态方法、成员的调用
图例:带箭头的虚线,指向被使用者
代码:
public class Boat{
}
public class People{
public int acrossRiver(Boat boat){
.........
}
}
5. 总结
对类图关系的理解,可以帮助更好的理解设计模式的精髓。后面笔者将逐步介绍几种常见的设计模式。