我不确定这是否是提出此类问题的地方所以请关闭此问题,如果它无关紧要的话。
我正在学习OO设计,并且在为简单的机器人系统创建良好设计时遇到了一些问题。以下是它的要点:
驱动程序操作机器人对象。 Robot
是BasicRobot
和HandicapRobot
实施的界面。
问题在于:BasicRobot
内部包含所有代码,而HandicapRobot
只有两个变量不同。也就是说,BasicRobot
在所有方向上都有传感器,而HandicapRobot
只有左前传感器。由于它们非常相似,我将HandicapRobot
继承自BasicRobot
。
但是,在某些情况下,我只能使用BasicRobot
而使用HandicapRobot
则不合适。这违反了替换规则,因为只要预期父类就可以使用子类。
我不确定如何以优雅的方式解决这个问题。我应该摆脱HandicapRobot
并简单地为BasicRobot
创建传感器修饰符吗?
答案 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;
}