初学设计模式,简单问题请指导

一个大厦由砖、门、窗等组成,砖是必不可少的,但窗户可有可无,这是属于聚合还是合成,我个人认为是聚合对不?聚合和合成的区别是什么?在设计时应该用设计模式中的哪种模式设计比较合适?谢谢

刚搜索了一下以前的贴子,有点同意fish的关于这个的讨论
在讨论聚合,关联,组合区别,讨论那么多内部类干什么?

确实,他们的关系按强弱分有

关联<聚合<组合

我看大家主要分岐在聚合和组合上。说白一点,聚合这种关系是被包含的对象的个数是 0..* 而组合是 1..*
聚合中的被包含对象可以没有。 而组合至少有一个。聚合是一种拥有的关系,而组合是整体与部分的关系

举一个简单的例子:
一个图书馆可以有十万本书,也可以一本也没有。但空的图书馆还是图书馆。这是聚合

一个车(我们平常能看到的普通的交通工具车)有轮子,有的车是四轮子的,有的车是三轮的,自行车是二轮的,还有独轮车,但车至少要有一个轮子,不然就不是车。这是组合关系。

再补充一点。聚合关系中,主对象的存在不依赖于次对象(被包含对象),也就是说书没有了,但图书馆仍然存在。不取决于书是否存在。

但轮子没有了,车就没有了。 也就是部分消失了,整体也就消失了

按照上面的说法,那大厦和砖、门、窗的关系应该是组合关系了

在实际中,我发现一个规律,比较方便人理解:

关联在领域建模中经常使用到。

依赖则在Service设计中经常用到。

使用设计模式用得比较多的是接口和实现,设计模式很少涉及到继承;但是很多设计模式用出的效果是和继承相竞争的。

刚学习OO的人喜欢用继承,其实继承是有害的,可以说是一种迫不得已的使用,就象if else一样的,我们可以使用设计模式来达到继承的效果。

请问如果是聚合关系应该怎么样实现,如果是合成关系又怎么实现?

聚合和组合实现代码形式类似:如下


public class user{
private UserType userType;

public UserType getUserType(){..}

}

在合成关系中,Part的对象任何时候只能从属于一个Whole对象, 这个约束
是一个设计上无形要求。

个人感觉这种细微区别在现在域建模驱动设计中用处不太大。