0

该练习是关于制作软件来管理机器人工厂。

在我的程序中,我可以创建单个零件,然后用它们创建机器人,但我也可以让机器人内部装有更小的机器人。这就是 Composite 的用武之地。事实上,Component 类可以是 Part,Composite 类是 Robot,它实现了 Parts 列表并继承自 Part 类(这是因为机器人也可以由单个部件制成)

一切都指向了这个解决方案,但是当他们告诉我们有两种类型的零件时,问题就来了;陆地和水生以及机器人不能由不同类型的零件制成。

我不知道这是否真的是一种可行的方式,因为该图暗示我可以用这两种部件制作一个机器人,即使我将在代码中限制它。

这是一个UML图

在此处输入图像描述

4

2 回答 2

2

对于这个问题,我们有 2 个解决方案:

机器人 UML

它们基本上是相同的,尽管您不使用右侧的“xor”限制,并用它来增加复杂性。

这两种解决方案之间存在细微差别。在左边,你不能有一个没有至少 1 个水生或陆生部分的机器人(最初没有提到)。在右边,你可以有一个没有零件的机器人(也没有提到)。

通过更改两种解决方案中的多重性,您可以在完全没有零件的机器人或至少需要一个不是机器人的零件的机器人之间进行选择。这并不理想,并且复合模式不会受到我刚才提到的影响。不过,我无法想象出更好的解决方案。

于 2013-04-23T23:52:50.697 回答
1

这是我写的关于使用泛型的多重继承和组合模式的 CodeReview 文章。

https://codereview.stackexchange.com/questions/14542/multiple-inheritance-and-composition-with-java-and-c-updated

这可能会给你一些关于如何编写实现的想法。在某些方面,您所说的似乎是多态性。

首先,是的,您可以使用组合模式来实现您的目标,但也不要忘记使用接口!

于 2013-04-24T08:30:10.277 回答