Допустим, я реализую свою собственную версию Scrabble.
В настоящее время у меня есть класс Board
, который содержит множество квадратов
. Квадрат
, в свою очередь, состоит из IBonus
и Фигуры
. Бонусные реализации на самом деле являются обычным бонусом для Scrabble, но возможно, что я попробую добавить какой-нибудь новый и необычный бонус, чтобы оживить игру - гибкость здесь имеет первостепенное значение!
Подумав немного, я пришел к выводу чтобы реализации IBonus
работали, им необходимо знать всю Board
, а также ее текущее положение (на Board
), чтобы он знал, где он и он может проверить фигуру, которая находится в том же квадрате, что и бонус). Мне это кажется настолько плохим, что, по сути, нужно знать много информации.
Итак, моей наивной реализацией было бы передать Board
в качестве аргумента методу IBonus.calculate ()
, IBonus.calculate (Board Board, Point position)
, то есть
Кроме того, похоже, создается круговая ссылка. Или я не прав?
Мне не особенно нравится этот подход, поэтому я ищу другие возможные подходы. Я знаю, что могу заставить вычислить
принять интерфейс вместо конкретного класса, то есть вычислить (доска IBoard)
, но, как мне кажется, это не так уж лучше, чем в первом случае.
. Я боюсь, что буду слишком сосредоточен на моей текущей реализации, чтобы иметь возможность думать о целых различных проектах, которые могли бы соответствовать хотя бы такому же решению этой проблемы.
Может быть, я мог бы переделать всю игру и разместить бонусы в другом месте, чтобы облегчить этот расчет? Может быть, я слишком сосредоточен на том, чтобы они были на Board
? Я, конечно, надеюсь, что есть другие подходы к этой проблеме!
Спасибо