5

我使用该方法创建了以下类,该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.

我想在我的ApplicationModel,ApplicationViewApplicationController类中获取这个特定的实例。

这怎么可能?

4

5 回答 5

8

我会在 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;
    }
}

您可以在此处阅读有关单例设计模式 的更多信息。

每次您需要唯一的Application实例时,您都需要:

Application app = Application.getSharedApplication();
于 2012-08-16T12:31:26.127 回答
2

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

单例设计模式教程

于 2012-08-16T12:31:09.100 回答
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该类。Applicationmain

ApplicationSettingsApplicationModel,ApplicationViewApplicationController必须更新以Application在其构造函数中获取对象。

于 2012-08-16T12:40:46.977 回答
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

}
于 2012-08-16T12:52:10.143 回答
0

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

于 2012-08-16T12:39:31.080 回答