【问题标题】:Calling a function in a different class without creating a new instance of the class调用不同类中的函数而不创建类的新实例
【发布时间】:2013-06-11 15:19:20
【问题描述】:

我有以下类:Main 创建 Game 实例,创建 Player 实例和 World 实例,World 创建 Floor 实例。

现在我想从 Player 调用 Floor 中的一个方法,此时它基本上只是一个 getter,但以后可能会变得更加复杂。解决此问题的最佳方法是什么?在 Game 中创建一个调用 Floor 然后写入玩家的方法?我觉得在 Player 中创建一个新的 Floor 实例是不明智的。 (但实际上并不知道。)而且我认为没有办法直接在我的层次结构中从 Player 调用 game.world.floor?

【问题讨论】:

  • 应用程序中是否只有一个Floor?如果是这样,您将需要研究一种称为单例模式的东西。 Floor 可以有多个实例,而Player 只需要知道他正在使用哪个实例吗?如果是这样,那么您需要将对Floor 的引用传递给Player。如果Player 必须总是有这样的引用,那么它应该在构造函数中是必需的。
  • 它不仅仅是使用语言的机制来允许您调用或不调用方法。了解相关对象之间的自然现实世界关系很重要。这个方法是否也属于 Floor?这个方法有什么作用?它使用了应用程序状态中的哪些项目,以及它发生了什么变化?
  • 只有一层,所以我研究一下单例模式,谢谢。大卫,我不确定,正如我所说,我相信该方法可能应该在 Game 上使用,但它使用 Floor 设置的值,而 Player 使用它们,目前就这么简单。
  • @David 我认为在这种情况下建议使用单例模式不一定是个好主意。
  • @sdasdadas:您可能是对的,这就是为什么我提供评论而不是答案的原因。如果我们不是在谈论单个实例,而是在谈论更复杂的对象关系,那么我的其他建议可能会有所帮助。这些对象可以携带对彼此的引用,或者根本不相互交互,而是与协调这些交互的Game 交互。

标签: java class oop


【解决方案1】:

玩家了解世界。

世界都知道地板。

要允许玩家进入楼层,请执行以下操作:

实现这个:

class World
{
    private Floor floor;

    public Floor getFloor()
    {
        return floor;
    }
}

【讨论】:

    【解决方案2】:

    你可以像这样使用地板单例

    public class Floor{
        private static Floor instance;
        private Floor(){
            // do initial things
        }
        public static Floor getInstance(){
            if(instance == null)
                instance = new Floor();
            return instance;
        }
    }
    

    现在您可以通过调用从任何地方访问 Floor 实例

    Floor.getInstance()
    

    无论您从哪里调用,它都将始终使用 Floor 的单个实例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      相关资源
      最近更新 更多