这个练习是关于制作一个管理机器人工厂的软件。
在我的程序中,我可以创建单个部件,然后使用它们创建机器人,但我也可以在机器人内部放置较小的机器人。这就是复合体的用武之地。事实上,Component类可以是一个Part,而Component类是实现部件列表并从Part类继承的Robot (这是因为robot也可以由单个部件构成)。
一切都指向这个解决方案,但当他们告诉我们有两种类型的零件时,问题就来了;陆地和水生动物和机器人不能用不同类型的零件制造。
我不知道这是否真的是一种可行的方式,因为这个图意味着我可以用这两种部件来制作一个Robot,尽管我会在代码中限制它。
这是一个UML图

发布于 2013-04-24 07:52:51
对于这个问题,我们有两种解决方案:

它们基本上是相同的,尽管您避免使用右侧的"xor“限制,并用它来换取更多的复杂性。
这两种解决方案之间有一个细微的区别。在左边,你不能有一个机器人没有至少一个水生或陆地部分(这是最初没有提到的)。在右边,你可以有一个没有部件的机器人(也没有提到)。
通过更改两种解决方案中的多重性,您可以在完全没有部件的机器人和至少需要一个部件的机器人之间进行选择。这并不理想,而且复合模式不会受到我刚才提到的问题的影响。不过,我想不出更好的解决方案。
发布于 2013-04-24 16:30:10
这是我写的一篇关于多重继承和使用泛型的组合模式的CodeReview文章。
这可能会给你一些关于如何编写实现的想法。在某些方面,您正在谈论的似乎是多态。
首先,是的,您可以使用组合模式来实现您的目标,但也不要忘记接口的使用!
https://stackoverflow.com/questions/16180538
复制相似问题