很久以前,我在Stack Overflow上问了一个关于继承的问题。
我说过我以OOP方式设计国际象棋引擎。因此,我继承了Piece抽象类的所有片段,但继承仍然存在。让我按代码显示
public abstract class Piece
{
public void MakeMove();
public void TakeBackMove();
}
public abstract class Pawn: Piece {}
public class WhitePawn :Pawn {}
public class BlackPawn:Pawn {}
程序员发现我的设计超出了工程学,建议删除有色块类,并保留色块作为属性成员,如下所示。
public abstract class Piece
{
public Color Color { get; set; }
public abstract void MakeMove();
public abstract void TakeBackMove();
}
这样,Piece可以知道他的颜色。实施后,我已经看到我的实施如下。
public abstract class Pawn: Piece
{
public override void MakeMove()
{
if (this.Color == Color.White)
{
}
else
{
}
}
public override void TakeBackMove()
{
if (this.Color == Color.White)
{
}
else
{
}
}
}
现在,我看到keep color属性导致实现中的if语句。这让我感到我们需要继承层次结构中的特定颜色块。
在这种情况下,您将拥有诸如WhitePawn,BlackPawn之类的类,还是会通过保留Color属性来进行设计?
没有看到这样的问题,您将如何开始设计?保留Color属性还是具有继承解决方案?
编辑:我想指定我的示例可能与现实生活中的示例不完全匹配。因此,在尝试猜测实现细节之前,只需集中问题。
我实际上只是问问使用Color属性是否会导致语句更好地使用继承?