初学设计模式,简单问题请指导
一个大厦由砖、门、窗等组成,砖是必不可少的,但窗户可有可无,这是属于聚合还是合成,我个人认为是聚合对不?聚合和合成的区别是什么?在设计时应该用设计模式中的哪种模式设计比较合适?谢谢
一个大厦由砖、门、窗等组成,砖是必不可少的,但窗户可有可无,这是属于聚合还是合成,我个人认为是聚合对不?聚合和合成的区别是什么?在设计时应该用设计模式中的哪种模式设计比较合适?谢谢
刚搜索了一下以前的贴子,有点同意fish的关于这个的讨论
在讨论聚合,关联,组合区别,讨论那么多内部类干什么?
确实,他们的关系按强弱分有
关联<聚合<组合
我看大家主要分岐在聚合和组合上。说白一点,聚合这种关系是被包含的对象的个数是 0..* 而组合是 1..*
聚合中的被包含对象可以没有。 而组合至少有一个。聚合是一种拥有的关系,而组合是整体与部分的关系
举一个简单的例子:
一个图书馆可以有十万本书,也可以一本也没有。但空的图书馆还是图书馆。这是聚合
一个车(我们平常能看到的普通的交通工具车)有轮子,有的车是四轮子的,有的车是三轮的,自行车是二轮的,还有独轮车,但车至少要有一个轮子,不然就不是车。这是组合关系。
再补充一点。聚合关系中,主对象的存在不依赖于次对象(被包含对象),也就是说书没有了,但图书馆仍然存在。不取决于书是否存在。
但轮子没有了,车就没有了。 也就是部分消失了,整体也就消失了
按照上面的说法,那大厦和砖、门、窗的关系应该是组合关系了
在实际中,我发现一个规律,比较方便人理解:
关联在领域建模中经常使用到。
依赖则在Service设计中经常用到。
使用设计模式用得比较多的是接口和实现,设计模式很少涉及到继承;但是很多设计模式用出的效果是和继承相竞争的。
刚学习OO的人喜欢用继承,其实继承是有害的,可以说是一种迫不得已的使用,就象if else一样的,我们可以使用设计模式来达到继承的效果。
请问如果是聚合关系应该怎么样实现,如果是合成关系又怎么实现?
聚合和组合实现代码形式类似:如下
|
在合成关系中,Part的对象任何时候只能从属于一个Whole对象, 这个约束
是一个设计上无形要求。
个人感觉这种细微区别在现在域建模驱动设计中用处不太大。