2012-02-13 11 views
0

ClipboardまたはProcessRegisterのようないくつかのクラスがプロジェクトで1回だけ実行されるようにしたいので、1つのインスタンスしかありません。プロジェクト内のオブジェクト/クラスの配布方法を改善する

私の今の質問:私のプロジェクトでは、これらのインスタンスをどのようにして最適に配布しますか?

ATMはどちらもシングルトンであり、オブジェクトはgetInstance()以上のインスタンスを取得します。

私のもう一つのアイデアは、getProjectClipboard()またはgetProcessRegister()のようないくつかの静的メソッドがインスタンスを返すクラスProjectを作成することです。

これらを配布するにはどうすればよいですか?それにはどんなパターンがありますか? (キャッシュの目的を除く)ステートフルシングルトンの使用に対して、通常、誰かが、私が言うとおり

挨拶デニス

答えて

4

サービスロケータと依存性注入の2つのパターンが主に使用できます。サービス・ロケーター・パターンはおそらくあなたが参照しているものです。これらのオブジェクトの参照をどこからでも探すために、中央の場所から明示的に取り出します。単純なJavaアプリケーションの場合は、通常は静的メソッドの束です。これは問題ありません。ここで全体的に優れたアプローチがあるとは思わないので、各シングルトンに対して静的メソッドが1つしかないことを確認してください。

ここ数年前に、メンタリティーの変化が主流となって、依存性注入とそのより一般的なフレームワークになりました...このパラダイムを持つ春は、このシングルトンにアクセスする必要がある各場所で、それらはありますが、あなたのオブジェクトは注入された正しい参照を得る...

私はそれが主流の解決策であるので、依存性注入とおそらく春を調べることをお勧めします...私はあなたにあなたがSpringのチュートリアルや類似のものを検索した場合、インターネットにはたくさんのドキュメントがあります。

基本的には、cあなたのシングルトンのそれぞれを春の豆とみなしてから、あなたのオブジェクトに春を注入してください...このアプローチの注意点は、あなたのオブジェクトのすべてが春に構築されなければならないということですが、実際には、実際にあなたの人生はテストやメンテナンスの面で簡単になります。

+1

依存性注入は必要なものです(良いパターンを学習したい場合)。 DI有線コードは、サービスロケータまたはシングルトンの静的メソッドを使用したコードよりもテストする方がはるかに簡単です。 Google Guiceも見てみましょう。それは春よりも小さいです。 –

0

:アプリケーションを実行するごとに、これらのクラスのインスタンスを1つ持っていて、それらを必要とそれらを注入(参照依存性注射)。これにより、同じJVM内の異なる構成で同じアプリケーションを複数回実行することもできます。

2

シングルトンは、言語レベルで行われるとグローバルオブジェクトです。これは小規模なプロジェクトではうまくいくかもしれませんが、プロジェクトが成長したときには最適なアイデアではありません。突然シングルトンが特定のスコープに対してシングルトンだけである状況が発生する可能性があります。次に、オブジェクトとそれにアクセスするたびに触れなければなりません。

あなたがProjectオブジェクトまたはApplicationオブジェクトを持っている場合、これはProject-関連シングルトンにアクセッサを持つのに適していると言われています。 Projectが多くのstaticアクセサを提供するクラスに過ぎない場合、それは名前空間に似ています。これは明快な勝利であり、リファクタリングを容易にしますが、アーキテクチャの点でそれほど変化はありません。

シングルトンを実行する最もよい方法は、言語レベルではなくアプリケーションレベルです。 Springのようなアプリケーションや依存関係のフレームワーク(Beanの標準的なスコープは実際にはシングルトンです)が非常に役に立ちます。後でオブジェクトがシングルトンではないことが分かったら、構成を変更するだけでオブジェクト自体は変更しないでください。

関連する問題