2012-03-24 1 views
1

アプリケーション全体でオブジェクトを使用するのは一般的です。 アプリケーションを使用してオブジェクトを共有するさまざまなパターン/モデル/方法は何ですか?オブジェクトアプリケーションを幅広く共有する

"メインクラス"を定義し、メンバ変数を設定し、この "メインクラス"の他のすべてのクラスを適切に拡張していますか?おそらく静的なクラスを作成する方がより良い、よりクリーンな方法ですか?あなたの好みのパターンは何ですか?

答えて

4

一般的にオブジェクトはアプリケーション全体に使用されています。アプリケーションを通してオブジェクトを共有するためのさまざまなパターン/モデル/方法は何ですか?

一般的な方法の1つは、シングルトンパターンを使用することです。私はそれを避けるだろう。

は、メンバ変数を設定すると、この「メインクラス」良い方法

絶対にありませんから、他のすべてのクラスを拡張し、「メイン・クラス」を定義しています。他のものとは別に、のインスタンスの変数であれば、他のクラスのインスタンスとは「共有」されません。また、他のクラスは論理的にあなたの「メイン」クラスとの継承関係を持たないでしょうか?一般的なルールとして、継承は本当に適切な場合にのみ使用してください。すばやく修正することはできません。

どのようなパターンですか?

依存性注入。アプリケーションが起動したら、お互いを知る必要のある適切なオブジェクトをすべて作成し、それらの依存関係について(通常はコンストラクタ内で)伝えます。それが適切であれば、いくつかの異なるオブジェクトはすべて同じオブジェクトに依存することができます。あなたは多くの依存性注入フレームワークの1つを使用して、これを簡単に達成することができます。

ので、依存性の注入は、一般的にシングルトンを使用してより良い作品:クラス自体は、依存関係が実際にが共有であるかどうかわからない

  • 。なぜそれは気にする必要がありますか?
  • グローバルステートでユニットテストが難しくなる
  • 各クラスは、宣言されたときにその依存関係を明確にします。アプリケーションをナビゲートしてクラスが互いにどのように関連しているかを簡単に確認できます。彼らは、ロギングのようなもののためにしているとき

シングルトンとグローバル工場がより適切である - それでも、それは、クラスのログの側面をテストするために、比較的難しいことを意味します。シングルトン(通常は初期化の後で "固定"のまま)を使いこなす方法を追加するよりも、必要なものを行い、テスト対象のオブジェクトに渡す依存関係を作成するほうがはるかに簡単です。

+0

シングルトンのパターンが避けられるべきなのかどうか不思議です。 –

+0

@KshitijMehta:これは単にテスト容易性のために追加しただけでした。 –

+0

シングルトンパターンを使用するケースはありますか?あなたのプロジェクトにDIフレームワークを含めるために必要な余計な努力はどのくらい重視しますか? –

0

Singleton pattern、AFAIKはソフトウェア工学では好ましい方法です。

+0

好ましくは何ですか?継承を濫用する?はい。 DIに好ましい?非常にまれに、IMO。 –

1

依存性注入を持つSpringのようなフレームワークを使用すると、明示的に定義する必要なしに、「グローバル」オブジェクトのすべての利点を無料で得ることができます。アプリケーションのコンテキストで参照を作成するだけで、同期の問題を心配することなく、任意のオブジェクトに挿入することができます。

0

あなたが探しているのはシングルトンパターンだと思います。このパターンでは、メモリ内にクラスのインスタンスを1つしか作成できないことが保証されます。

例:

public class mySingletonClass { 

    private static mySingletonClass singleObject; 

    // Note that the constructor is private to prevent more than one 
    //instance of the class 
    private SingletonObjectDemo() { 
     // Optional Code 
    } 

    public static mySingletonClass getSingletonObject() { 
     if (singleObject == null) { 
      singleObject = new mySingletonClass(); 
     } 
     return singleObject; 
    } 
} 

あなたがそれを利用するのは避けるべき、と述べました。容認可能な場合があります。one of which is hereです。

関連する問題