在JAVA以及其他的面向对象设计模式中,类与类之间主要有6种关系,分别是:依赖、关联、聚合、组合、继承、实现,他们的耦合度依次增强。
其中,关联
、聚合
和组合
关系仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等,它们在编程语言中的体现却是基本相同的。
这些关系在设计类结构时帮助明确类之间的关系和职责。
依赖
- 定义:一个类A使用到了另一个类B,类B的变化会影响到类A。。
- 特点:短暂的,通常通过方法参数或局部变量实现。
- 代码体现:
表现在代码层面,类B作为参数被类A在方法中使用。class A { void drive(B b) { b.start(); } }
关联(Association)
-
定义:一个类与另一个类有某种联系。
-
特点:较为松散的关系,通常通过成员变量实现。
-
代码体现:
class Person { private Car car; public Person(Car car) { this.car = car; } }
聚合(Aggregation)
-
定义:一个类包含另一个类,表示“整体-部分”的关系。
-
特点:弱关系,部分可以独立存在。
-
代码体现:
class Team { private List<Player> players; public Team(List<Player> players) { this.players = players; } }
组合(Composition)
-
定义:一个类包含另一个类,表示“整体-部分”的关系。
-
特点:强关系,部分依赖于整体的生命周期。
-
代码体现:
class House { private Room room; public House() { this.room = new Room(); } }
继承(Inheritance)
-
定义:一个类继承另一个类。
-
特点:表示“是一个”的关系。
-
代码体现:
class Animal {} class Dog extends Animal {}
实现(Implementation)
-
定义:一个类实现接口。
-
特点:实现接口中定义的方法。
-
代码体现:
interface Flyable { void fly(); } class Bird implements Flyable { public void fly() { System.out.println("Bird is flying"); } }