【问题标题】:using singleton objects使用单例对象
【发布时间】:2015-06-23 16:41:46
【问题描述】:

我正在尝试制作一个纸牌游戏套牌构建器。

我已经用 JavaFX 制作了几个场景并建立了数据类(DeckCardCharacter 类)。通过在每个场景控制器中创建 Deck 类 Singleton,我可以访问相同的 Deck 对象。

同时,我只需要一个Deck 的对象,我可以在其中保存所有卡片。我通过扩展Deck 类创建了一个类AllCardsDeck。使用这种方法,我可以制作AllCardsDeck 的对象并将普通玩家的牌组分开吗?

另外,当我创建AllCardsDeck 的对象时,它是否会影响具有单例模式的父类Deck

【问题讨论】:

  • en.wikipedia.org/?title=Singleton_pattern ;另外,这与 JavaFX 有什么关系?
  • 这看起来是一个很好的例子,说明了为什么不应该仅仅为了方便访问对象而使用单例模式。当只创建一个实例本身就有意义时,请使用单例模式。
  • 您确定需要为Deck 开设一个全新的课程吗?您是否考虑过只使用ListSet

标签: java oop inheritance singleton


【解决方案1】:

您似乎不需要两个不同的课程;甲板是甲板。您应该有一个带有两个实例的 Deck 类:currentDeskallCards

所以你只需要构造一个只实例化两次的类(不是单例 - 双例?)。原理是完全一样的,不需要完全套用模式,特别是单例模式,尊重思路就行了。

【讨论】:

  • 这两个套牌有一些不同之处,例如套牌允许的最大卡片数量和套牌的角色等级。所有的卡片组都忽略了 maxnum 和 hero 类,所以这就是我通过扩展它来制作它的原因。现在想一想,制作 allCardsDeck 然后将其扩展为常规的 Deck 类会是一个更好的主意。感谢您的评论。它有帮助!
【解决方案2】:

正如其名称和Wikipedia 状态,单例模式意味着您将只创建 Deck 对象的一个实例。如果您创建两个或更多实例,则它不会是单例。

在这个问题中,您需要 一个牌组 来允许玩家抓牌,以及类似 Hand 类 为每个玩家实例化的东西,因为它是每个玩家的地方他们保留自己的卡片。

这样你就可以让你的 Deck 单例工作(因为游戏中只有一个迷宫),并且每个玩家都有一个手牌。它们是不同的东西,应该这样对待。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 2012-01-27
    • 1970-01-01
    相关资源
    最近更新 更多