如何从Java中的另一个类获取类的特定实例?

时间:2012-08-16 12:27:52

标签: java oop model-view-controller class instance

我使用main方法创建了以下类,该方法创建了Application的新实例以及ApplicationModelApplicationViewApplicationController的实例这个特别Application

public class Application
{

    // Variables

    private ApplicationSettings         settings;
    private ApplicationModel            model;
    private ApplicationView             view;
    private ApplicationController       controller;

    // Constructor

    public Application()
    {
        settings        = new ApplicationSettings();
        model           = new ApplicationModel();
        view            = new ApplicationView(model);
        controller      = new ApplicationController();
    }

    // Main method

    public static void main(String[] args)
    {
        Application application = new Application();
    }

    // Getters for settings, model, view, controller for instance of Application

}

我知道,Application只会有一个唯一的实例。

我希望在我的ApplicationModelApplicationViewApplicationController课程中获得此特定实例。

怎么可能?

5 个答案:

答案 0 :(得分:7)

我会在Application类上使用单例。

使用public static方法返回您唯一的应用程序实例。

public class Application
{
    private Application() { } // make your constructor private, so the only war
                              // to access "application" is through singleton pattern

    private static Application _app;

    public static Application getSharedApplication() 
    {
        if (_app == null)
            _app = new Application();
        return _app;
    }
}

您可以阅读有关单身设计模式 here的更多信息。

每当您需要唯一的Application实例时,您可以执行以下操作:

Application app = Application.getSharedApplication();

答案 1 :(得分:2)

如果您需要保证只有一个Application实例,并且您需要这些类可以访问它,那么您希望使用Singleton设计模式。我不打算评论它是否是构建应用程序的最佳方式,但它将满足您的问题中的要求。

Singleton design pattern tutorial

答案 2 :(得分:2)

Application类的构造函数更改为private,并将this对象发送到ApplicationXxx类。

private Application()
{
    settings        = new ApplicationSettings(this);
    model           = new ApplicationModel(this);
    view            = new ApplicationView(this, model);
    controller      = new ApplicationController(this);
}

您可以使用new方法在Application课程上致电main

必须更新您的ApplicationSettingsApplicationModelApplicationViewApplicationController,才能在其构造函数中使用Application个对象。

答案 3 :(得分:1)

Application类型的参数添加到合成的构造函数中。创建实例时,只需传递this即可。例如

public class Application {
  String s = "Setting";
  class ApplicationSettings {
    Application sc;
    ApplicationSettings(Application sc){
      this.sc = sc;
      System.out.println(sc.s);
    }
  }

  // Variables

  private ApplicationSettings settings;

  // Constructor

  public Application()
  {
    settings = new ApplicationSettings(this);
  }

  // Main method

  public static void main(String[] args)
  {
    Application application = new Application();

  }

  // Getters for settings, model, view, controller for instance of Application

}

答案 4 :(得分:0)

我现在尝试了这个,你可以将this作为构造函数arg在Application的构造函数中传递给其他类(假设有一个为主类声明的引用)。这样,您显然可以创建Application类的多个实例。如果这就是你想要的......