2016-07-11 8 views
-2

私たちはC c VARを置けば、コードのいくつかの作品はすべてのオブジェクトの静的インスタンスまたは新しいインスタンス?

public class A { 

public void doSomething(B b) { 
    b.addSometing("queue1", getDefault()); 
    b.addSometing("queue2", getDefault()); 
    b.addSometing("queue3", getDefault()); 
} 

private C getDefault() { 
    C c = new C(); 
    c.setAutoCreate(true); 
    c.setExired(false); 
    c.setDelay(3500); 

    return c; 
}} 

のように見えました。 (クラスAのすべてのオブジェクトのデフォルトです)クラスAのオブジェクトごとに、クラスAのオブジェクトの大量に多くのメモリを使用します。C cを静的にする方がよいでしょうか?クラス全体に対してクラスCのインスタンスを1つだけ作成し、それをクラスAのすべてのオブジェクトに使用します。我々はそうする場合は、そのコードの後、私は多分私が間違っている、それは良い方法だと思う

public class A { 
private static C c = new C(); 

static { 
    c.setAutoCreate(true); 
    c.setExired(false); 
    c.setDelay(3500); 
} 

public void doSomething(B b) { 
    b.addSometing("queue1", c); 
    b.addSometing("queue2", c); 
    b.addSometing("queue3", c); 
} 

}

のように好きになるでしょう。私に助言してください。

+0

最後の1 doesn'tはあなたが別のキーのマップにC ' 'の同じインスタンスを追加する場合、その理由で' Map'と一緒に行くを検討し、私にはそのあまり意味が最初の場所は複数のキーに対して1つの値しか持たないのですか? – SomeJavaGuy

+3

_If_デフォルトの静的インスタンスを使用すると、それは_immutable_でなければなりません。そうしないと、副作用が発生する可能性があります。 'setAutocreate(true)'などは不変に見えません。 – Thomas

+0

'queue1'のcオブジェクトを変更すると、 'queue2'と 'queue3'のオブジェクトも変更されます。これが受け入れられるならば、あなたの静的な解決策は大丈夫だと思われます。 – Jeet

答えて

2

この質問に対する回答は、アプリケーションのロジックおよび/またはAがCインスタンスで行うことになっていることによって異なります。特定のオブジェクトのインスタンスが1回だけ必要な場合は、JavaのSingletonパターンを使用することをお勧めしますhttps://en.wikipedia.org/wiki/Singleton_pattern

しかし、クラスAのインスタンスがそのCメンバを変更している場合、1つのAオブジェクトのCメンバを変更すると、上記の方法を使用すると悪い考えになりますまたは他のオブジェクト上で実行されます。

Cメンバーにすべてのオブジェクトで使用されている設定オプションまたはデータが含まれているため(上​​記の例を参照)、したがって変更されることはありません。シングルトンパターンを使用して、すべてのAインスタンス - 私の意見では大丈夫です。

ベスト、 ジュリアン

関連する問題