1
先举例说明,然后再澄清。这是我的第一篇文章,我也尝试过搜索。包含对象是为了被视为构图还是聚合而创建的?
示例1:在Car构造函数中创建引擎对象。
public class Car{
private Engine engine;
Car(){
engine = new Engine();
}
}
示例2:在Car类之外创建并通过Car构造函数传入的引擎对象。
public class Car{
private Engine engine;
Car(Engine engine){
this.engine = engine;
}
}
示例3:在Car类之外创建并通过Car setEngine(引擎引擎)方法传入的引擎对象。
public class Car{
private Engine engine;
Car(){}
public void setEngine(Engine engine){
this.engine = engine;
}
}
我认为遏制是组合和聚合,包含的对象有一个所有者,如汽车拥有引擎。我认为不同的是每个对象的生命周期以及它们被销毁的时间。
组成:引擎对象在Car对象被销毁时被销毁。
聚集:引擎对象在Car对象被销毁时仍然存在。
我的谷歌搜索和stackoverflow搜索造成歧义。
以上1,2和3中的几个例子是组合,聚合还是两者?为什么?上面的例子是关联关系吗?
聚合将是一个有两个引擎的汽车。像普锐斯一样。 –
看看这个。 https://www.codeproject.com/Articles/330447/Understanding-Association-Aggregation-and-Composit –
示例2看起来像[策略模式](https://en.wikipedia.org/wiki/Strategy_pattern)。它可以模拟燃料注入与化油器; 4缸vs 6缸vs 8缸;等 – jww