Создание нового объекта и реализация метода reset()

В настоящее время я создаю консольную реализацию игры в 5-карточный покер на Java.

У меня есть класс, называемый HandOfCards, который будет обрабатывать отдельные руки, разыгрывая игрокам их карты, делая ставки и определяя победителя. У меня также есть класс, называемый GameOfPoker, который облегчает несколько раздач в покере и представляет собой полноценную игру в покер.

Я создам экземпляр HandOfPoker для GameOfPoker следующим образом:

HandOfPoker handOfPoker = new HandOfPoker(List<PokerPlayer> players, DeckOfCards deck);

Мой вопрос заключается в том, что в GameOfPoker я должен создать новый объект или определить метод сброса в HandOfPoker:

public class HandOfPoker{    
  public void reset(List<PokerPlayer> players) {
    this.players = players;
  }
}

public class GameOfPoker{
  public play() {
    // carry out game
    // then after a hand, I could either instantiate:
    //handOfPoker = new HandOfPoker(players, deck);
    // or I could reset:
    handOfPoker.reset();
    // now I'm ready to play another hand.
  }
}

Интуитивно кажется, что подход reset() кажется лучше - так как создание нового объекта кажется более дорогостоящим, так как новый экземпляр должен быть создан, а старый должен быть уничтожен.

Есть ли здесь подход наилучшей практики, или разница между этими двумя подходами достаточно мала, чтобы это не имело значения?

1 ответ

Решение

Как правило, создание нового объекта и разрешение уничтожить его сборщиком мусора не дорого, если только это не выполняется много раз в очень тесном цикле. Если вы сделаете это один раз за раздачу в игре, вы не сможете измерить разницу.

Поэтому лучше сконцентрироваться на наиболее логичном способе выразить ваш дизайн людям, читающим ваш код, решая, следует ли вам реализовать reset() метод или нет:

  • Если HandOfPoker никогда не разделяется между несколькими объектами, не используя reset() читатели вашего кода выглядят чище, потому что им не нужно заглядывать внутрь reset() чтобы увидеть, что происходит.
  • Если HandOfPoker распределяется между несколькими объектами, например, для отображения, для сохранения и т. д., тогда лучше иметь reset() вместо того, чтобы устанавливать новый объект в нескольких местах.
Другие вопросы по тегам