主要的6个关系:依赖,关联,聚合,组合,继承,实现。他们的耦合度依次增长,依赖<关联<聚合<组合<继承<实现。关联、聚合、组合3个关系只是语义上的区别,聚合、组合是一种强关联关系,在Java代码实现上是相同的。
1 依赖关系
一个类依赖于另一个类的定义,一个类A的方法操作另一个类B的对象。在Java中表现为:类的方法局部变量、类的方法形参、对类的静态方法调用。如下,A依赖于B:
class B{
public static void run(){
……
}
}
class A{
//使用形参方式发生依赖关系
public void method1(B a){
B.run();
}
//使用局部变量发生依赖关系
public void method2(){
B a= new B();
a.run();
}
//使用静态变量发生依赖关系
public void method13(){
B.run();
}
}
2 关联关系
类与类之间联接,使一个类A知道另一个类B的属性、方法。Java中表现为:类的成员变量。单向关联:类A中使用了类B作为成员变量;(不建议使用)双向关联:类A中使用了类B作为成员变量,类B中也使用了类A作为成员变量。
单向关联:
双向关联:
class B{
……
}
class A{
// 使用成员变量实现关联关系
B b;
……
}
3 聚合关系
聚合是整体-个体之间的关系,类A包含类B。整体和个体可以分离,有各自的生命周期。 个体可以属于多个对象,可以被多个对象共享,所以成员变量——个体——使用setter赋值。 关联关系两个类处于同一层次上,聚合、组合关系两个类处于不同层次上。
class A{
B b;
public vid setB(B b){
this.b=b;
}
……
}
4 组合关系
组合是整体-部分之间的关系。“整体”管理“部分”的生命周期,同生共死(如手和身体,手是身体的一部分),不可分离。“部分”单独存在时无意义。“部分”对象同一时刻只能和一个“整体”对象形成组合关系。 “部分”对象使用“整体”类的构造函数赋值。
class A{
B b;
public A(B b){
this.b=b;
}
……
}
5 继承关系(extends)
class A extends B{
……
}
6 实现关系(implements)
class A implements B{
……
}