5

この特定ののmain新しいインスタンスApplicationと のインスタンスApplicationModelを作成するメソッドを使用して、次のクラスを作成しました。ApplicationViewApplicationControllerApplication

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

}

の一意のインスタンスは常に 1 つだけであることはわかっていますApplication

ApplicationModelそして、この特定のインスタンスを my 、ApplicationViewおよびApplicationControllerクラスで取得したいと考えています。

それはどのように可能ですか?

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 のインスタンスが 1 つだけであることを保証する必要があり、それらのクラスからアクセスできるようにする必要がある場合は、Singleton デザイン パターンを使用します。それがあなたのアプリケーションを構築する最良の方法であるかどうかについてはコメントしませんが、あなたの質問の要件を満たすでしょう.

シングルトン設計パターンのチュートリアル

于 2012-08-16T12:31:09.100 に答える
2

Applicationクラスのコンストラクターをに変更し、オブジェクトをクラスprivateに送信します。thisApplicationXxx

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

メソッド内newからApplicationクラスを呼び出すことができます。main

、、およびコンストラクターでオブジェクトApplicationSettingsApplicationModel受け取るように更新する必要があります。ApplicationViewApplicationControllerApplication

于 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ました。コンストラクター内のコンストラクター引数としてApplication他のクラスに渡すことができます(メインクラスに対して宣言された参照があると仮定します)。そうすれば、明らかにApplicationクラスの複数のインスタンスを作成できます。それがあなたの望むものなら...

于 2012-08-16T12:39:31.080 に答える