Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Java中的另一个类获取类的特定实例?_Java_Oop_Model View Controller_Class_Instance - Fatal编程技术网

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

如何从Java中的另一个类获取类的特定实例?,java,oop,model-view-controller,class,instance,Java,Oop,Model View Controller,Class,Instance,我用main方法创建了以下类,它为这个特定的应用程序创建了Application的新实例和ApplicationModel、ApplicationView和ApplicationController public class Application { // Variables private ApplicationSettings settings; private ApplicationModel model; pri

我用
main
方法创建了以下类,它为这个特定的
应用程序创建了
Application
的新实例和
ApplicationModel
ApplicationView
ApplicationController

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

}
我知道,
应用程序
总是只有一个唯一的实例

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

}
我想在我的
ApplicationModel
ApplicationView
ApplicationController
类中获得这个特定实例

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

怎么可能呢?

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


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

放置一个
publicstatic
方法来返回您唯一的应用程序实例

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 app = Application.getSharedApplication();

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

应用程序
类的构造函数更改为
私有
,并将
对象发送到
应用程序XXX

private Application()
{
    settings        = new ApplicationSettings(this);
    model           = new ApplicationModel(this);
    view            = new ApplicationView(this, model);
    controller      = new ApplicationController(this);
}
您可以在
main
方法中调用
Application
类上的
new


必须更新
应用程序设置
应用程序模型
应用程序视图
应用程序控制器
以在其构造函数中获取
应用程序
对象。

应用程序
类型的参数添加到组合的构造函数中。创建它们的实例时,只需传递
这个
。比如说

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

}

这对我来说是一个完美的解决方案。非常感谢你!而且,可能是你打错了<代码>应用程序_app
应该是静态的,如果它是从静态方法引用的。请更正,因为我不确定。:)@爱德华·鲁切维茨:是的!这不是打字错误。我只是忘了把关键词放进去。它一定是静态的。是的,这非常适合我。非常感谢。谢谢你的回答。我一直在使用这种方法,但这不是我想要实现的。现在我宁愿使用Pablo Santa Cruz和smcg提出的单例设计模式。@EdwardRuchevits别忘了这一点。我只想创建一个
应用程序的实例。无论如何,谢谢你的回答。我认为,单例模式对我来说会更好,因为我只需要我的
应用程序的一个实例。但是谢谢你的回答!