假设我正在实现我自己的 Scrabble 版本。我目前有一个Board
包含大量Squares
. ASquare
又由 aIBonus
和 a组成Piece
。奖金实现实际上是 Scrabble 的通常奖金,但我可能会尝试添加一些新的和扭曲的奖金来为游戏增添趣味——这里的灵活性是最重要的!
经过一段时间的思考,我得出的结论是IBonus
,要让实现工作,他们需要知道整体Board
及其当前位置(在 上Board
,所以它知道它在哪里,它可以检查相同的部分正方形作为奖金)。这让我感到很糟糕,因为它基本上需要知道很多信息。
所以,我的幼稚实现是将Board
as 参数传递给IBonus.calculate()
方法,IBonus.calculate(Board board, Point position)
即。
此外,它似乎创建了一个循环引用。还是我错了?
我不是特别喜欢这种方法,所以我正在寻找其他可能的方法。我知道我可以calculate
接受一个接口而不是一个具体的类,即,calculate(IBoard board)
但我 IMO 并不比第一种情况好。
我担心过于专注于我当前的实现,以至于无法想到至少可以适应这个问题的完全不同的设计以及解决方案。也许我可以重新设计整个游戏并将奖金放在其他地方,这样可以方便计算?也许我太专注于让他们上Board
?我当然希望有其他方法可以解决这个问题!
谢谢