2011-07-20 6 views
4

に異なるクラスで同じオブジェクトを使用することができます私はAとBの両方で使用されているクラスCのオブジェクトが、問題を作成する必要が3つのJavaクラスA、BおよびCは、どのように私は、Java

を持っていると仮定別々にオブジェクトを作成するということは、クラスcのコンストラクタが2回呼び出されるということです。しかし、私はコンストラクタが一度呼び出されることを望みます。

私はクラスAで作成されたオブジェクトをクラスbに使用したいと思います。 AとBの両方の外側にオブジェクトCを作成し、Aのコンストラクタを有し、B

class A { 
    public A(C c) { 
     .... 
    } 
} 

class B { 
    public B(C c) { 
     .... 
    } 
} 

答えて

14

だから一度オブジェクトを作成し、クラスCのインスタンスを受け入れ、そしてAのコンストラクタに渡すと

+0

+1は、DIにリンクされた学習例として使用します。 – pap

+0

indepthの場合 – RMT

3

B:これは、オブジェクトがそれらにそれらを構築するのではなく、彼らの協力者について言われよう依存性注入の形として、Javaで非常に共通であることを

C c = new C(); 
A a = new A(c); 
B b = new B(c); 

... 

public class A 
{ 
    private final C c; 

    public A(C c) 
    { 
     this.c = c; 
    } 
} 

注意自己。

0

インスタンスを共有したいですか? [OK]を、どのように彼について:

C c = new C(); 
B b = new B(c); 
A a = new A(c); 

別のオプションは次のとおりです。また

B b = new B(); 
A a = new A(b.c); 
2

、AとBのコンストラクタは、互いに近くと呼ばれていない場合は、シングルトンとしてクラスCを定義することができます。

A a = new A(C.getInstance()); 
B b = new B(C.getInstance()); 

または代わりに、コンストラクタでABのためだけのgetInstanceの代わりに、コンストラクタ、つまりを呼び出す:あなたがやることでしょうhttp://mindprod.com/jgloss/singleton.html

を参照してください。

// C c = new C(); 
C c = C.getInstance(); 
+0

コンストラクタパラメータとしてCを追加するDIスタイルがJavaの一般的な(そして有用な)デザインパターンであることは@JonSkeetに同意します –