参考自graphic design patterns,讲的确实很透彻,静下心来看完就掌握了。
示例图:
上图示例中的六种关系:
- 车的类图结构为<<abstract>>,表示车是一个抽象类(或接口);
- 它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;
- 小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;
- 小汽车与发动机之间是组合关系,使用带实心箭头的实线表示;
- 学生与班级之间是聚合关系,使用带空心箭头的实线表示;
- 学生与身份证之间为关联关系,使用一根实线表示;
- 学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;
泛化关系:
suv 是继承自小汽车,最终代码中,泛化关系表现为继承非抽象类。
实现关系:
最终代码中,实现关系表现为继承抽象类(或实现接口)
聚合关系:
班级由学生组成,与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在。
组合关系:
公司由部门组成,与聚合关系不同的是,如果整体不存在了,则部分也不存在了。
关联关系:
关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示A知道B,但 B不知道A;
在最终代码中,关联对象通常是以成员变量的形式实现的;
依赖关系:
依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生;
在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还是“使用”对方的方法和属性