繁体   English   中英

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

[英]How to get specific instance of class from another class in Java?

我使用main方法创建了以下类,该方法为此特定Application创建Application新实例以及ApplicationModelApplicationViewApplicationController实例。

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类中获取此特定实例。

这怎么可能?

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

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

Singleton设计模式教程

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

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

您可以在main方法中调用Application类的new

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

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

}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM