Java中对象组合是强拥有关系,体现“整体-部分”生命周期绑定:部分由整体创建、管理并随整体销毁,通过私有成员+构造创建+不暴露引用来实现。
Java 中的对象组合(Composition)是一种强拥有关系,表示“整体-部分”的生命周期绑定:部分对象的生命周期由整体对象完全控制,整体销毁时,部分也随之销毁。它比继承更灵活、更符合高内聚低耦合的设计原则,是实现代码复用和构建复杂对象的核心手段之一。
组合不是语法特性,而是设计意图的体现。关键在于:成员变量声明 + 构造时创建 + 不对外暴露引用。与聚合(Aggregation)不同,组合中“部分”不能脱离“整体”独立存在。
以“汽车(Car)拥有发动机(Engine)”为例:
public class Engine {
private final String type;
public Engine(String type) { this.type
= type; }
public void start() { System.out.println("Engine " + type + " started."); }
}
public class Car {
private final Engine engine; // 私有持有,不可替换
public Car(String engineType) {
this.engine = new Engine(engineType); // 构造时创建,生命周期绑定
}
public void drive() {
engine.start();
System.out.println("Car is driving.");
}
// 不提供 getEngine(),避免外部修改或误用
}
调用:Car car = new Car("V6"); car.drive(); —— Engine 实例完全由 Car 管理。
避免混淆三者:
extends,强调行为扩展,但易导致紧耦合组合虽好,需注意边界和规范:
close() 或 destroy() 中显式释放transient 并自定义 writeObject/readObject