C#中的复合模式

时间:2013-04-23 22:57:21

标签: c# design-patterns composite

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

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

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

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

这是一个UML图

enter image description here

2 个答案:

答案 0 :(得分:2)

这里有2个解决这个问题的方法:

Robot UML

它们基本上是相同的,尽管你正在不使用右边的“xor”限制,并将其交易以增加复杂性。

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

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

答案 1 :(得分:1)

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

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

这可能会为您提供有关如何编写实现的一些想法。在某些方面,你所谈论的似乎是多态性。

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