2012-01-25 11 views
-1

私のアプリにはいくつかのインターフェイスがあり、それらの実装を提供するシングルトンクラスを作成したいと思います。そのような:私はを探しています何いくつかのインターフェイスの実装を提供するクラスを作成する方法

public class Singleton{ 
    //singleton's stuff 

    private Interface1 interface1Impl; 
    private Interface2 interface2Impl; 

    public Interface1 getInterface1(){ 
     return interface1Impl; 
    } 

    public Interface2 getInterface2(){ 
     return interface2Impl; 
    } 
} 

- アプリ内の各クラスに同じインタフェースの実装を提供します。この方法ですべて正常に動作しますが、これを達成するには良い方法ですか?

+3

私はあなたが探しているものは、抽象的な工場のパターンと信じています。 – Zaki

+0

ファサードのように見えます。 –

答えて

1

はい、工場とよく似ています(または、おそらくサービスロケータがあなたのケースに適しています)。

工場はほとんど常にシングルトンよりも良いアイデアです。たとえば、Factoryが必要なときにSingletonとして動作することができます(遅延初期化、キャッシング)。何か他のものが必要なときにこの動作を変更することができます(テスト、スレッドの安全性など)。

+0

ありがとう、工場は私が探しているものです。しかし、私は質問がある - 工場のメソッドは常に実装の新しいインスタンスを作成する必要がありますか、またはそれら(実装)はコンストラクタで作成することができますか? –

+1

ファクトリメソッドは、再利用可能な(キャッシュされた)オブジェクトを返すことができます: 'Integer.fromString( '1')'のようなものは、複数の呼び出しに対して同じ 'Integer(1)'オブジェクトを返します。 @Peterが示唆しているように、[Dependency Injection](http://en.wikipedia.org/wiki/Dependency_injection)を使用してさらに抽象化することができます。 Factoryは、コードの外にインスタンスを構築します。 DIはあなたのコードの外で工場を動かします。関心のある各クラスは、例えば「Interface1」実装を受け取る。創造時に;このインスタンスの構築とその存続期間の制御は、DIフレームワーク上にあります。 – 9000

1

dependency injectionを実装することができるように私には見えます。その場合は、Google Guiceはあなたにとって素晴らしいライブラリです。

関連する問題