一、依赖关系(Dependence)
只要是在 类中用到了对方,那么它们之间就存在依赖关系。如果没有对象,连编译都通过不了。
Demo:
1 public class PersonServiceBean {
2 //类
3 private PersonDao personDao;
4
5 public void save(Person person) {
6 }
7
8 public IDCard getIDCard(Integer personid) {
9 return new IDCard();
10 }
11
12 public void modify() {
13 Department department = new Department();
14 }
15 }
16
17 public class PersonDao {}
18 public class Person {}
19 public class IDCard {}
20 public class Department {}
对应的类图:
小结:
1)类中用到了对方;
2)如果是 类的成员属性;
3)如果是方法的返回类型;
4)是方法接收的参数类型;
5)方法中使用到;
二、泛化关系(Generalization)
泛化关系实际上就是继承关系,它是依赖关系的特例。
Demo:
1 public class DaoSupport {
2 public void save(Object entity){}
3 public void delete(Object id){}
4 }
5
6 public class PersonServiceBean extends DaoSupport{
7
8 }
对应的类图:
小结:
1)泛化关系实际上就是继承关系;
2)如果 A 类继承了 B类,我们就说 A 和 B 存在泛化关系;
三、实现关系(Implementation)
实现关系实际上就是 A 类实现 B 接口,它是依赖关系的特例。
Demo:
1 public interface PersonService {
2
3 public void delete(Integer id);
4 }
5
6 public class PersonServiceBean implements PersonService {
7 @Override
8 public void delete(Integer id) {
9 System.out.println("delete..");
10 }
11 }
对应的类图:
四、关联关系(Association)
关联关系实际上就是 类与类之间的联系,它是依赖关系的特例。
关联具有导航性:即双向关系或单向关系。
关系具有多重性:如“1”(表示有且仅有一个),“0” (表示0个或者多个),“0,1”(表示0个或者一个),“n...m”(表示 n 到m个都可以),“m...*” (表示至少m个)。
Demo:
1 public class Person {
2 private IDCard card; //单向关系
3 private Home home; //双向关系
4 }
5
6 public class IDCard {}
7
8 public class Home {
9 private Person person;
10 }
对应的类图:
五、聚合关系(Aggregation)
聚合关系表示的是 整体和部分的关系,整体与部分可以分开。
聚合关系是关联关系的特例,所以它具有关联的导航性和多重性。
如:一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成,组成电脑的各个配件是可以从电脑上分离出来的,使用带空心菱形的实线来表示。
Demo:
1 public class Computer {
2 private Mouse mouse; //鼠标可以和computer分离
3 private Moniter moniter;//显示器可以和Computer分离
4 public void setMouse(Mouse mouse) {
5 this.mouse = mouse;
6 }
7 public void setMoniter(Moniter moniter) {
8 this.moniter = moniter;
9 }
10 }
11
12 public class Moniter {}
13
14 public class Mouse {}
对应的类图:
六、组合关系(Composition)
如果像人和头部,心脏不可分离的,则升级为组合关系。
组合关系:也是整体与部分的关系,但是整体与部分不可以分开。
案例:在程序中我们定义实体: Person与IDCard、 Head, 那么 Head 和Person 就是 组合, IDCard 和 Person 就是聚合。
但是如果在程序中Person实体中定义了对IDCard进行级联删除,即删除Person时连同IDCard一起删除, 那么IDCard 和 Person 就是组合了。
Demo:
1 public class Person {
2 private IDCard card; //聚合关系
3 private Head head = new Head(); //组合关系
4 }
5
6 public class IDCard {}
7
8 public class Head {}
对应的类图:
Demo2:
1 public class Computer {
2 /**鼠标可以和computer不能分离**/
3 private Mouse mouse = new Mouse();
4 /**显示器可以和Computer不能分离**/
5 private Moniter moniter = new Moniter();
6 public void setMouse(Mouse mouse) {
7 this.mouse = mouse;
8 }
9 public void setMoniter(Moniter moniter) {
10 this.moniter = moniter;
11 }
12 }
13
14 public class Mouse {}
15
16 public class Moniter {}
对应的类图: