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

问题描述 投票:0回答:5

我使用

main
方法创建了以下类,该方法为这个特定的
Application
创建了
ApplicationModel
的新实例以及
ApplicationView
ApplicationController
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
ApplicationView
ApplicationController
类中获取这个特定实例。

怎么可能?

java oop model-view-controller class instance
5个回答
9
投票

我会在应用程序类上使用单例。

放置一个

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();

2
投票

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

单例设计模式教程


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

您的

ApplicationSettings
ApplicationModel
ApplicationView
ApplicationController
必须更新以在其构造函数中获取
Application
对象。


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

}

0
投票

我现在尝试了这个,您可以将

this
作为
Application
的构造函数中的构造函数参数传递给其他类(假设有为主类声明的引用)。这样你显然可以创建
Application
类的多个实例。如果这就是你想要的...

© www.soinside.com 2019 - 2024. All rights reserved.