我目前正在用 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() 方法似乎更好 - 因为实例化一个新对象似乎成本更高,因为必须创建一个新实例,而旧实例必须被丢弃。
这里是否有最佳实践方法,或者这两种方法之间的差异是否足够小以至于无关紧要?
最佳答案
通常,创建一个新对象并让垃圾收集器销毁它并不昂贵,除非这在一个非常紧凑的循环中完成很多次。如果你在一场比赛中每手都这样做一次,你将无法衡量差异。
因此,在决定是否应实现 reset()
方法时,最好集中精力以最合乎逻辑的方式向代码的人类读者表达您的设计:
- 如果
HandOfPoker
永远不会在多个对象之间共享,那么不使用reset()
对代码的读者来说会更简洁,因为他们不需要查看内部reset()
看看发生了什么。 - 如果
HandOfPoker
在多个对象之间共享,例如为了显示,为了持久化等,那么最好有一个reset()
,而不是在多个地方设置新对象。
关于java - 实例化新对象与实现 reset() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43308499/