Создание нового объекта и реализация метода 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()
вместо того, чтобы устанавливать новый объект в нескольких местах.