在设计模式中类与类之间的关系主要有6种: 依赖、关联、聚合、组合、继承、实现, 它们之间的耦合度依次增加。
1、依赖关系
依赖关系是一种使用关系, 大多数情况下, 依赖关系体现在某个类的方法使用另一个类的对象作为参数。在系统实施阶段, 依赖关系通常通过三种方式来实现, 第一种也是最常用的一种: 将一个类的对象作为另一个类中的方法的参数, 第二种方式: 在一个类的方法中将另一个类的对象作为其局部变量, 第三种方式是在一个类的方法中调用另一个类的静态方法。
public class Driver{
public void driver(Car car){
car.move();
}
......
}
public class Car{
public void move(){
.....
}
.....
}
2、关联关系
关联关系是类与类之间最常用的一种关系, 它是一种结构化关系, 用于表示一类对象与另一类对象之间有联系。
public class Customer{
private Product[] products;
......
}
public class Product{
private Customer customer;
......
}
3、聚合关系
聚合关系表示整体与部分的关系。 在聚合关系中, 成员对象是整体对象的组成部分, 但是成员对象可以脱离整体对象独立存在。 再代码实现中, 成员对象通常作为构造方法、 setter 方法或业务方法的参数注入到整体对象中。
public class Car{
private Engine engine;
//构造注入
public Car(Engine engine){
this.engine = engine;
...
} ... }
//设置注入
public void setEngine(Engine engine){
this.engine = engine;
...
}
public class Engine { ... }
4、组合关系
组合关系也表示类之间整体与部分的关系, 但是在组合关系中整体对象可以控制成员对象的生命周期, 一旦整体对象不存在, 成员对象也就不存在了。 在代码实现中, 通常在整体类的构造方法中直接实例化成员类。
public class Head{
private Mouth mouth;
public Head(){
mouth = new Mouth(); //实例化成员类
...
} ... }
public class Mouth{
...
}
5、继承关系(泛化关系)
用于描述子类与父类之间的关系,父类也叫基类或超类, 子类也叫派生类。
6、接口与实现关系
在接口中通常没有属性, 而且所有的操作都是抽象的, 只有操作的声明, 没有操作的实现。