2012-08-16 47 views
5

Applicationの新しいインスタンスを作成するmainメソッドと次のクラスを作成しました。ApplicationApplicationModel,ApplicationViewおよびApplicationControllerのインスタンスが作成されました。Javaの別のクラスからクラスの特定のインスタンスを取得するには?

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の唯一の固有のインスタンスが存在することを、知っています。

そして、この特定のインスタンスを私のApplicationModelApplicationViewおよびApplicationControllerクラスに入れたいと思います。

どうすれば可能ですか?

答えて

6

私は、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; 
    } 
} 

あなたはシングルトンデザインパターンhereについての詳細を読むことができます。

あなたが唯一Applicationインスタンスを必要とするたびに、実行します。

Application app = Application.getSharedApplication(); 
+0

これは私にとって完璧な解決策です。どうもありがとうございます! –

+0

おそらく、あなたはタイプミスをしました。 'Application _app'は静的メソッドから参照される場合は静的でなければなりません。私には分かりませんので、修正してください。 :) –

+1

@EdwardRuchevits:はい!タイプミスではありませんでした。私はそこにキーワードを入れることを忘れてしまいます。 ** ** **静的**でなければなりません。 –

2

アプリケーションのインスタンスが1つしかなく、それらのクラスからアクセスできるようにする必要がある場合は、シングルトンデザインパターンを使用します。私はそれがあなたのアプリケーションを構築する最良の方法であるかどうかについてコメントするつもりはありませんが、それはあなたの質問の要件を満たすでしょう。

Singleton design pattern tutorial

+0

はい、それは私にとってはまったく合っています。ありがとうございました! –

0

私は仮定(あなたが他のクラスにApplicationのコンストラクタ内コンストラクタ引数としてthisを渡すことができ、今、この権利を試してみましたメインクラスについて宣言された参照を持つ)。そうすれば、明らかにApplicationクラスの複数のインスタンスを作成できます。それはあなたが望むものであるならば...

+0

私は 'Application'のインスタンスを1つしか作成しません。とにかく、あなたの答えをありがとう。 –

2

変更あなたのApplicationクラスのコンストラクタはprivateを可能とApplicationXxxクラスにthisオブジェクトを送信します。

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

あなたはmainメソッド内からApplicationクラスにnewを呼び出すことができるようになります。

あなたApplicationSettingsApplicationModelApplicationViewApplicationControllerはそのコンストラクタでApplicationオブジェクトを取るために更新する必要があります。

+0

あなたの答えをありがとう。私はこのアプローチを使ってきましたが、達成したいのではありませんでした。さて、パブロ・サンタ・クルスとsmcgが提案したように、シングルトンのデザインパターンを使用したいと思います。 –

+0

@EdwardRuchevits [シングルトンは悪い](http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons)を忘れないでください。 – maba

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

私は「アプリケーション」のインスタンスを1つしか必要としないので、シングルトンのパターンは私にとってはより良いと思います。しかし、あなたの答えをありがとう! –

関連する問題