设计模式的帮助

时间:2009-12-14 07:42:31

标签: python design-patterns

我有一些算法要做的非常相似,但都是不同的。

我会尝试举例说明我的意思。

我们假设我有一个Robot类。这个类应该是所有类的“基础”。它提供了使机器人在其环境中工作的基本机制。它可能或不必单独工作(我的意思是它可以是一个抽象类,它本身是无用的,或者如果可能的话,有基本机制准备工作)。

所有机器人都有手。但是有些机器人会有类似人的手,其他人会有刀片,其他人会有剃须刀。我可以做一个名为RobotBase的基类,然后创建RobotHumandHand,RobotBladeHand和RobotRazorHand。但是他们也可以有不同的头,不同的眼睛,不同的腿,不同的手臂等。有什么简单的方法可以解决这个问题吗?我想把它放在有点像乐高的地方,所以我可以定义一个机器人并“添加”我想要的部分。也许通过接口?我甚至不知道它们是否存在于python中(这是我将要使用的语言)。

任何意见/建议都非常感谢!谢谢!

4 个答案:

答案 0 :(得分:5)

我可能会遇到这样一个问题的设计模式是:Dependency Injection和一个框架,复合模式和Builder模式。它们基本上应该让您将机器人的创建与其使用分开。

答案 1 :(得分:4)

我认为你的机器人应该有一个端口列表,即每个机器人可能拥有的一些注入组件。您的Robot课程将成为RobotPart的容器。您可以使特定部件具有特定接口。 RobotHand扩展RobotPartRobot类有一个包含RobotHand实现列表的字段(您可以将其限制为2手,但一般情况下可能会有更多) 。您可以对RobotHead继承的RobotPart执行相同操作,并且Robot类中的字段会保留RobotHead的实现。轮流RobotHead可能会包含RobotEye实施列表,依此类推。然后,您的特定Robot实现可以从基类继承它们的行为,或者利用配置,例如使用RobotBladeHand s(如果可用)。

答案 2 :(得分:3)

如果您正在寻找设计模式,那么我建议您使用策略模式。因为实现此模式,您可以动态地交换机器人的组件。

答案 3 :(得分:1)

我不是Python人,但是快速查看表明它们支持多重继承,可以像Java接口一样使用(Python似乎不支持接口)。所以你可以拥有RobotHand的超级类,然后是RobotHumanHand,RobotBladeHand等,与你的眼睛和脚相同。这是做你想做的事情的合理方式。