0
我在Java中建立一個國際象棋程序。
問題
我創建了一個名爲IPiece
接口類型:
public interface IPiece
{
boolean isFriendlyTo(IPiece piece);
Square[] destinationsFrom(IBasicBoard onBoard, Square fromSquare);
}
我實現它是這樣:
public abstract class AbstractChessPiece implements IPiece
{
private PieceArchetype pieceArchetype;
private Color color;
public AbstractChessPiece(PieceArchetype pieceArchetype, Color color)
{
this.pieceArchetype = pieceArchetype;
this.color = color;
}
public PieceArchetype archetype()
{
return this.pieceArchetype;
}
public Color color()
{
return this.color;
}
@Override
public boolean isFriendlyTo(IPiece piece)
{
if(this.equals(piece))
return true;
return this.isFriendlyTo((AbstractChessPiece) piece);
}
public boolean isFriendlyTo(AbstractChessPiece piece)
{
return this.color() == piece.color();
}
@Override
public abstract Square[] destinationsFrom(IBasicBoard onBoard, Square fromSquare);
}
我的問題關於isFriendlyTo(IPiece)
方法。將此方法包含在IPiece
接口中是否是一種糟糕的設計,因爲它需要對任何派生類型進行強制轉換。沒有鑄造就無法計算結果。它看起來很尷尬。當涉及到投射時,我總是會猜測一個設計。
爲什麼不在'IPiece'中包含一個訪問器'getColor'?然後沒有必要施放... – wakjah
@wakjah我想到了這一點,但我正在探索重新使用界面來構建其他非棋類遊戲的可能性,其中片友好不是由顏色決定的。 – TheSecretSquad
你能否擁有一個「IPiece」而不是「AbstractChessPiece」的對象?如果這從來沒有發生過,那麼我認爲你不需要'IPiece'。 –