私は現在、Javaで5カードドローポーカーのゲームのコンソール実装を作成しています。新しいオブジェクトのインスタンス化とreset()メソッドの実装
私はHandOfCardsというクラスを持っています。ハンドオフカードは、プレーヤーのカードを扱い、賭け、勝者を決定する個々の手続きを処理します。私はまた、GameOfPokerというクラスを持っています。このクラスは、複数のポーカーの手を容易にし、ポーカーのゲームを完全に表現しています。
私は、次のような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.
}
}
:
HandOfPoker handOfPoker = new HandOfPoker(List<PokerPlayer> players, DeckOfCards deck);
私の質問はGameOfPokerに、私は新しいオブジェクトをインスタンス化しなければならないか、私はHandOfPoker内のリセット方法を定義する必要があり、あります
直感的には、reset()のアプローチがよりよく見えるように感じます。新しいインスタンスを作成する必要があるため、新しいオブジェクトをインスタンス化するとコストがかかるように見え、古いオブジェクトはゴミ箱に入れなければなりません。
ここではベストプラクティスのアプローチがありますか、または2つのアプローチの違いがそれほど問題ではありませんか?
さらに、リセットするにはフィールドの明示的な再初期化が必要ですが、新しいオブジェクトのフィールドはすでに「0」/「false」/「null」に初期化されています。これらの値が新しいインスタンスに適している場合、新しいオブジェクトを作成するよりも実際にフィールドを手動でリセットする方が実際にはコストがかかるかもしれません。しかし、これは不要なマイクロ最適化であり、これを考慮しないでください。この答えで既に述べたように、プログラムロジックに焦点を当てる必要はありません。 – Andreas