Как избежать «этого» как параметра класса - PullRequest
0 голосов
/ 22 мая 2018

Я не думаю, что было бы неплохо использовать this в качестве параметра класса, потому что могут возникнуть ошибки, если порядок инициализации объектов неправильный.

Что лучше всего избегать этого?

Пример:

public class Game{

    private Player p1, p2, currentPlayer;
    private Board board;

    Game() {
        board = new Board(this);
    }

    private boolean hasFieldsToBeClicked() {
            return board.checkFieldsToBeClicked();
        }

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

1) Как насчет строителя, который сначала создает игру и игровое поле без другого.Тогда строитель может установить доску в игре и игру на доске.

2) Кажется, что доска является неотъемлемой частью игры.

  • а) Итак, выможет использовать интерфейсы для игры и доски и реализовывать оба в одном классе.
  • б) Если вы хотите отделить игру от доски, вы можете использовать внутренний класс для доски в игре.
0 голосов
/ 22 мая 2018

С точки зрения дизайна: просто не делайте этого здесь!

Значение: a Board представляет собой плату .Знает ли ваша шахматная доска об игре, в которую вы играете в данный момент, или нет?

Другими словами: прохождение this может быть в порядке, но, как вы указали, это также может быть проблемой.Таким образом, лучшая практика: проходите this, только если у вас есть на то веские основания.Особенно, когда это происходит внутри конструктора, и this все еще находится в процессе инициализации.

Предоставление шахматной доске информации о текущей игре не является хорошей причиной.

Имейте в виду: ваши классы / объекты должны моделировать реального мира.Устанавливайте только те отношения, которые имеют смысл!

Таким образом, реальным ответом здесь было бы выяснить почему ваш класс Board должен знать о классе Game, чтобы затем избавиться от этой зависимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...