设计模式UML中的六种关系
粗体内容 依赖关系 关联关系 聚合关系 组合关系 继承 实现
依赖
虚线的箭头
对象A依赖于对象B 则A “use a”B 比如驾驶员和汽车的关系,带虚线的箭头表示
依赖关系在Java中的具体代码表现形式为B为A的构造器或者方法中的局部变量 方法 过构造器参数 方法返回值 或者A调用B的静态方法
public class A { private A(){ B b = new B(); } public void method1(){ B b = new B(); b.methord1(); } public void method2(){ B.method2(); } public void method3(B b){ String s = b.field1; System.out.println(s); } public B method4(){ return new B(); } }
关联
实线的箭头
关联关系:当两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系是,这两个对象之间为关联关系。,它体现在两个类中一种强依赖的关系,比如我和我的朋友,这种关系,不存在依赖关系中的偶然性,关系也不是临时的,一般是长期的
关联关系分为单向关联个双向关联。在Java中表现为类A使用了类B 。其中类B是作为类A 的成员变量
在Java代码形式上,关联关系中作为成员变量的类
class Driver{ private Car car = new Car(); public void drive(){ car.run(); } } class Car{ public void run(){ System.out.println("qiche kai dong le"); } }
聚合
实线的空心符号
聚合关系是关联关系的一种特例,他体现在整体与部分的拥有关系,即“has a”的关系。此时整体与部分之间是可分离的。他们之间具有各自的生命周期,部门可以属于多个整体对象,也也可以为多个对象共享,所以聚合关系也常被称为共享关系
在Java代码形式上,聚合关系中作为成员变量的类一般使用set方法赋值,用户手动new一个car
class Driver1{ private Car car = null; public void drive(){ car.run(); System.out.println("driver1 lai dongle "); } public void serCar(Car c){ car =c; } } class Car{ public void run(){ System.out.println("qiche kai dong le"); } }
组合
实线的实心符号
整体与部分的生命周期一样
关联、聚合、组合只能配合语义,结合上下文才能判断出来,而只给出一段代码让我们判断是那种关系是行不通的
class Driver2{ private Car car = null; public Driver2(Car car){ this.car = car; } public void drive(){ car.run(); System.out.println("driver2 lai dongle "); } }
放在构造器里面,强调了非要不可的意思。
继承
实线的三角符号
继承表示类与类或者接口与接口之间的父子关系。
例如:人是一种高级动物,不仅可以像动物一样可以吃和睡觉,人还有自己的特性,思考学习等等
class Animal{ public void eat(){} public void sleep(){} } class People extends Animal{ public void think(){} }
实现
虚线的三角符号
如果实现了某个接口,那么就必须实现接口中所有的方法。
代码就不做演示了。