我有一些算法要做的非常相似,但都是不同的。
我会尝试举例说明我的意思。
我们假设我有一个Robot类。这个类应该是所有类的“基础”。它提供了使机器人在其环境中工作的基本机制。它可能或不必单独工作(我的意思是它可以是一个抽象类,它本身是无用的,或者如果可能的话,有基本机制准备工作)。
所有机器人都有手。但是有些机器人会有类似人的手,其他人会有刀片,其他人会有剃须刀。我可以做一个名为RobotBase的基类,然后创建RobotHumandHand,RobotBladeHand和RobotRazorHand。但是他们也可以有不同的头,不同的眼睛,不同的腿,不同的手臂等。有什么简单的方法可以解决这个问题吗?我想把它放在有点像乐高的地方,所以我可以定义一个机器人并“添加”我想要的部分。也许通过接口?我甚至不知道它们是否存在于python中(这是我将要使用的语言)。
任何意见/建议都非常感谢!谢谢!
答案 0 :(得分:5)
我可能会遇到这样一个问题的设计模式是:Dependency Injection和一个框架,复合模式和Builder模式。它们基本上应该让您将机器人的创建与其使用分开。
答案 1 :(得分:4)
我认为你的机器人应该有一个端口列表,即每个机器人可能拥有的一些注入组件。您的Robot
课程将成为RobotPart
的容器。您可以使特定部件具有特定接口。 RobotHand
扩展RobotPart
和Robot
类有一个包含RobotHand
实现列表的字段(您可以将其限制为2手,但一般情况下可能会有更多) 。您可以对RobotHead
继承的RobotPart
执行相同操作,并且Robot
类中的字段会保留RobotHead
的实现。轮流RobotHead
可能会包含RobotEye
实施列表,依此类推。然后,您的特定Robot
实现可以从基类继承它们的行为,或者利用配置,例如使用RobotBladeHand
s(如果可用)。
答案 2 :(得分:3)
如果您正在寻找设计模式,那么我建议您使用策略模式。因为实现此模式,您可以动态地交换机器人的组件。
答案 3 :(得分:1)
我不是Python人,但是快速查看表明它们支持多重继承,可以像Java接口一样使用(Python似乎不支持接口)。所以你可以拥有RobotHand的超级类,然后是RobotHumanHand,RobotBladeHand等,与你的眼睛和脚相同。这是做你想做的事情的合理方式。