簡體   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