Я делаю шахматную программу и пытаюсь оптимизировать свой код, в котором у меня есть абстрактный базовый класс ChessPiece
, который имеет базовые свойства Board
, Color
и StartPosition
.Теперь в этом конструкторе базового класса я добавляю конкретный экземпляр.Вот эта часть:
// ChessPiece.cs
protected ChessPiece(Square startPosition, PieceColor color, Board board)
{
this.StartPosition = startPosition;
this.CurrentPosition = startPosition;
this.Color = color;
this.Board = board;
this.Board[startPosition] = this;
// ↑
// I add the pieces inside the indexer assignment (e.g. pieces.Add(piece)...)
}
Вот как я добавляю фигуры в классе Board
:
// Board.cs
public ChessPiece this[Square square]
{
get { ... }
set
{
// simplified version of how I add pieces
this._pieces.Add(value);
}
}
Теперь я настраиваю свою доску следующим образом:
// Game.cs
private void PopulateBoard()
{
this.CreateStandardPieces(PieceColor.White);
this.CreateStandardPieces(PieceColor.Black);
}
private void CreateStandardPieces(PieceColor color)
{
// rook
new Rook(aSquare, color, this.Board);
// more initializations here
}
Пример экземпляра new Rook(...)
выглядит странно для меня, как будто это пустой экземпляр.Принимая во внимание, что на самом деле происходит всякий раз, когда я создаю экземпляр фигуры, она автоматически добавляется на доску, а не выглядит как «пустая копия».
Теперь мой вопрос: как мне улучшить дизайн, чтобы избежать создания экземпляров?выглядеть так?Или этот дизайн принят как хороший дизайн ООП?
РЕДАКТИРОВАТЬ:
добавлен код, как я добавляю куски