我目前正在用Java创建一个5张牌抽奖扑克游戏的控制台实现。
我有一个名为HandOfCards的课程,它将处理个人手牌的程序 - 交易玩家的牌,下注并确定获胜者。我还有一个名为GameOfPoker的课程,它可以帮助多人扑克,代表扑克游戏的完整位置。
我将为GameOfPoker构建HandOfPoker实例:
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()方法看起来更好 - 因为实例化一个新对象似乎更昂贵,因为必须创建一个新实例,旧的实例必须被删除。
这里是否有最佳实践方法,或两种方法之间的差异是否足够小以至于它并不重要?
答案 0 :(得分:6)
通常,创建一个新对象并让垃圾收集器销毁它并不昂贵,除非在非常紧密的循环中多次完成。如果你在游戏中每手一次,那么你将无法衡量差异。
因此,在决定是否应该实现reset()
方法时,最好将注意力集中在以最合理的方式向人类读者表达您的代码:
HandOfPoker
永远不会在多个对象之间共享,那么不使用reset()
会使代码的读者看起来更整洁,因为他们无需查看reset()
内部以查看内容是什么继续。HandOfPoker
在多个对象之间共享,例如对于显示,持久性等,最好是reset()
而不是在多个地方设置新对象。