在 Java 中,“组合对象”(Composition)通常指一个对象由多个其他对象组合而成,通过成员变量持有子对象的引用,从而复用功能、构建复杂结构。下面从设计原则、管理方式、生命周期、常见模式、示例几个方面说明如何“管理”组合对象。
多用组合,少用继承(Favor composition over inheritance)
组合强调的是:
class Engine {
void start() {
System.out.println("Engine start");
}
}
class Car {
private Engine engine = new Engine(); // 组合
void run() {
engine.start();
}
}
✅ 特点:
更灵活、可测试:
class Car {
private final Engine engine;
Car(Engine engine) {
this.engine = engine;
}
}
✅ 优点:
class Car {
private Engine engine;
public void setEngine(Engine engine) {
this.engine = engine;
}
}
⚠️ 注意:
Engine engine = new Engine();
Car car = new Car(engine);
class Car {
private Engine engine = new Engine();
}
class ResourceHolder {
private Connection conn;
void close() {
if (conn != null) conn.close();
}
}
或使用 try-with-resources:
try (Engine e = new Engine()) {
e.start();
}
用于树形结构:
interface Node {
void operation();
}
class Leaf implements Node {
public void operation() {}
}
class Composite implements Node {
private List<Node> children = new ArrayList<>();
void add(Node n) {
children.add(n);
}
public void operation() {
for (Node n : children) n.operation();
}
}
✅ 适合:
interface Coffee {
double cost();
}
class MilkDecorator implements Coffee {
private Coffee coffee;
}
class Context {
private Strategy strategy;
}
A -> B -> A ❌
解决:
privateprivate final List<Item> items = new ArrayList<>();
private final Engine engine;
class Team {
private List<Member> members = new ArrayList<>();
}
@Service
class Car {
@Autowired
private Engine engine;
}
Java 中组合对象的管理 = 合理持有子对象 + 明确生命周期 + 低耦合设计 + 必要时使用设计模式
如果你有具体场景(比如:树结构、UI、业务对象、Spring Bean),我可以给你更针对性的示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。