ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 实例化新对象与实现reset()方法

2019-08-23 20:04:07  阅读:217  来源: 互联网

标签:software-design java oop object


我目前正在用Java创建一个5张牌抽奖扑克游戏的控制台实现.

我有一个名为HandOfCards的课程,它将处理个人手牌的程序 – 交易玩家的牌,下注并确定获胜者.我还有一个名为GameOfPoker的课程,它可以帮助多人扑克,代表一场扑克游戏.

我将为GameOfPoker构造HandOfPoker实例:

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

我的问题是,在GameOfPoker中,我应该实例化一个新对象,还是应该在HandOfPoker中定义一个reset方法:

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()而不是在多个地方设置新对象.

标签:software-design,java,oop,object
来源: https://codeday.me/bug/20190823/1700693.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有