设计模式系列(七)UML类图
UML类图
- 用于描述系统中类(对象)本身的组成和类(对象)之间的各种静态关系
- 类与类之间的关系:依赖、泛化(继承)、实现、关联、聚合与组合
依赖
只要在类中用到了对方,那么他们之间就存在依赖关系,如果没有对方,连编译都无法通过
public class PersonServiceBean {
private PersonDao personDao;//类
public void save(Person person){}
public IDCard getIDCard(Integer personid){}
public void modify(){
Department department = new Department();
}
}
public class PersonDao{}
public class IDCard{}
public class Person{}
public class Department{}
- 类中用到了对方
- 可能是类的成员属性
- 方法的返回类型
- 方法接收的参数类型
- 可能是方法中使用到
泛化
泛化实际上就是类的继承关系,是依赖关系的特例
public abstract class DaoSupport{
public void save(Object entity){
}
public void delete(Object id){
}
}
public class PersonServiceBean extends Daosupport{}
泛化其实就是继承关系。如果A类继承了B类,我们就说A和B存在泛化的关系
实现
实现关系实际上就是 A类实现了B类的接口,它也是依赖的关系
public interface PersonService {
public void delete(Interger id);
}
public class PersonServiceBean implements PersonService {
public void delete(Interger id){}
}
关联关系
关联关系实际上就是 类与类之间的关系,它也是属于依赖关系的一种
关联具有 导航性 :即双向关系或单向关系
关联具有多重性:一对一 、一对多、多对多
聚合关系
聚合(Aggregation)关系表示的就是 整体和部分的关系,整体和部分可以分开存在。聚合关系是 关联关系的特例,所以聚合也有关联的 导航性与多重性
例子:如一台电脑由键盘和鼠标 显示器等组成;组成电脑的各个配件是可以从电脑上分离出来的
组合关系
组合关系:与聚合关系一样,也是 整体与部分 的关系,但是 整体与部分不可分开,聚合关系中,整体与部分可分开存在。
例如:在程序实体类中 Person 类(人) 与 IDCard 类(身份证)、 Head 类(头)。其中 Person 与 Head 就是组合关系,人有头,但是头不能离开人,人不能缺少头;
Person 与 IDCard 就是聚合关系,人有身份证,但是人和身份证两者之间可以分离
public class Person{
private IDCard card;
private Head head = new Head();
}
public class IDCard{}
public class Head{}
如图:UML类图中实心菱形代表组合关系,空心菱形代表聚合关系
注意:以上所说的只是例子,比如电脑和鼠标是聚合关系,但是也可能是聚合关系,如下代码
public class Computer {
// 作为 Computer 类的成员私有变量
private Mouse mouse = new Mouse(); //鼠标和computer 不能分离
private Moniter moniter = new Moniter();//显示器和Computer 不能分离
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
public void setMoniter(Moniter moniter) {
this.moniter = moniter;
}
}
// 鼠标类
public class Mouse {
}
public class Moniter {
}
如上例子:当 Computer 类创建实例化的时候,Mouse 与 Moniter 类也都同时实例化,而当 Computer 类实力对象被销毁的时候,Mouse 与 Moniter 类也都同时被销毁了,因此,在这种情况下,电脑和鼠标之间的关系是组合关系