将单一职责原则应用于棋盘应用程序,Piece接口/类应该负责什么?
我确定它需要知道它的颜色、类型和有效移动。但是它是否也应该知道它在棋盘上的位置(x/y)?或者,棋盘应该知道每个棋子的位置。
这个决定也会对棋子如何移动产生一些影响,例如,棋盘是否决定棋子的有效移动等等。
将单一职责原则应用于棋盘应用程序,Piece接口/类应该负责什么?
我确定它需要知道它的颜色、类型和有效移动。但是它是否也应该知道它在棋盘上的位置(x/y)?或者,棋盘应该知道每个棋子的位置。
这个决定也会对棋子如何移动产生一些影响,例如,棋盘是否决定棋子的有效移动等等。
您考虑将 PieceOnBoard 作为一个不同于 Piece 的实体是正确的。
有几种方法可以实现它 - 但通常您需要将适用于象棋中的车的方面与它参与特定对弈的具体车分开。
您可以将 Piece 设计为一个接口,该接口根据 PieceOnBoad 和 BoardPosition 给出有效移动,它可以拥有特定于不同类型棋子的具体实现。这个类的实现对于 "Rook" 将对应于 "Rook in General"。
PieceOnBoard 将由 Piece、Color 和 BoardPosition 的组合而成。PieceOnBoard 的每个特定实例将对应于参与特定棋局的特定车。
然后,BoardPosition 可以仅仅是一组 PieceOnBoard 对象。