OO设计的麻烦

时间:2014-10-25 05:32:02

标签: oop

我不确定这是否是提出此类问题的地方所以请关闭此问题,如果它无关紧要的话。

我正在学习OO设计,并且在为简单的机器人系统创建良好设计时遇到了一些问题。以下是它的要点:

驱动程序操作机器人对象。 RobotBasicRobotHandicapRobot实施的界面。

问题在于:BasicRobot内部包含所有代码,而HandicapRobot只有两个变量不同。也就是说,BasicRobot在所有方向上都有传感器,而HandicapRobot只有左前传感器。由于它们非常相似,我将HandicapRobot继承自BasicRobot

但是,在某些情况下,我只能使用BasicRobot而使用HandicapRobot则不合适。这违反了替换规则,因为只要预期父类就可以使用子类。

我不确定如何以优雅的方式解决这个问题。我应该摆脱HandicapRobot并简单地为BasicRobot创建传感器修饰符吗?

2 个答案:

答案 0 :(得分:2)

只要可以使用HandicapRobot,就可以使用BasicRobot,但只要HandicapRobot可以使用BasicRobot,就无法使用HandicapRobot。这意味着{{1}}应该是基类。

也就是说,您的层次结构可能存在其他问题。如果两个不同的变量是bool,那么你可能需要从基类中分解一些代码并将它放在派生类中。

答案 1 :(得分:1)

它看起来像是装饰设计模式的应用。你必须创建一个接口: 然后,IRobot有两个类实现了这个接口BasicRobot和HandicapedRobot。 HandicapedRobot将通过IRobot包含BasicRobot的实例。

interface IRobot{}

class BasicRobot : implements IRobot{}

class HandicapedRobot : implements IRobot{
 IRobot m_internal;
 SomeType m_additionalData;
}