web-dev-qa-db-ja.com

実際のアプリケーションでシングルトンパターンが正確に使用される場所

私はちょうどシングルトンパターンが使用されている場所に興味がありました...パターンがどのように機能し、どこで使用できるかを知っていますが、私は実際にどのアプリケーションでも使用していません。誰かがそれを使用できる例を示してもらえますか。誰かが実際のアプリケーションでどのように、どこで使用したかを説明できれば本当に感謝しています。ありがとう、スワティ

42
swati

通常、グローバル構成にはシングルトンが使用されます。最も単純な例は LogManager です。静的なLogManager.getLogManager()メソッドがあり、単一のグローバルインスタンスが使用されます。

実際、これはLogManagerから独自のクラスを派生し、そのように追加のインスタンスを作成できるため、「真の」シングルトンではありませんが、通常はusedシングルトンとして。

別の例は Java.lang.Runtime -ドキュメントから:

すべてのJavaアプリケーションには、クラスRuntimeの単一インスタンスがあります。これにより、アプリケーションは、アプリケーションが実行されている環境とインターフェースできます。現在のランタイムはgetRuntimeメソッドから取得できます。

それはほとんどシングルトンの定義です:)

現在、シングルトンパターンはmostly最近では眉をひそめています-密結合を導入し、シングルトンを使用するものをテストするのが難しくなりますそのコンポーネントを簡単にモックアウトします。あなたがそれなしで逃げることができれば、そんなに良い。代わりに、可能であれば依存関係を注入してください。

58
Jon Skeet

オンラインのフットボールチームストアシステムでシングルトンパターンを使用しました。 ShoppingCartクラスにシングルトンパターンを適用しました。

アプリケーションインスタンスごとにカートのインスタンスが1つだけ必要でした。そのため、シングルトンはその状況に最も適しているように見えました。

12
Manaf Abu.Rous

いくつかの例:

  • ハードウェアアクセス
  • データベース接続
  • 構成ファイル
11
Florian

AudioDriverServiceの状況を考えてみましょう。これはシングルトンパターンで設計されています。そのため、AudioDriverServiceクラスのインスタンスを1つだけ作成できます。実際、Windows Media PlayerまたはYoutube Playerは両方とも、新しいインスタンスを作成するのではなく、同じオブジェクトAudioDriverServiceを共有します。

5
Mr. D

Loggerを使用するときは、Loggerクラスにシングルトンパターンを使用します。シングルトンではない場合、すべてのクライアントが独自のLoggerオブジェクトを持ち、マルチスレッド環境でLoggerインスタンスに同時にアクセスし、複数のクライアントが同時にログファイルを作成/書き込みするため、データが破損します。

2
Arun Raaj

たとえば、1つのライセンスと1つのデータベース接続を使用して、実際のWordでシングルトンパターンを使用するソフトウェアの試用版を実行します。教祖のジョン・スキートがこのような例を提供できるかもしれません。

2
Dead Programmer

シングルトンは素敵なデザインパターンです。パターンを決定する前に、まず問題と解決策の詳細な分析を行います。ソリューション内のオブジェクトにインスタンスが1つしかない場合、それをデザインでモデル化する場合は、シングルトンパターンを使用する必要があります。たとえば、ソフトウェアでPCをモデリングしている場合、実行中のプログラムに関して、PCのインスタンスは1つしか存在できません。 Jon Skeetが言ったように、Java.lang.Runtimeはシングルトンとしてモデル化されています。これは、Javaランタイム内でロードおよび実行されるすべてのJavaオブジェクトに対して、ランタイムのインスタンスが1つしかないためです。

繰り返しますが、多くの場合、間違った理由で使用されます。オブジェクトを渡さずにどこからでも簡単にオブジェクト(Object :: instance()など)にアクセスできるように、シングルトンを作成しないでください。これは私が遭遇した最悪の使用法です。

2
ferosekhanj

Androidアプリでメディアプレーヤーを使用しているため、mediaplayerクラスを拡張し、シングルトンパターンを使用しました。インスタンスが1つだけ必要で、他の部分で同じインスタンスを呼び出すことができます再生中かどうか、または現在再生中のファイルを確認するために、アプリの.

よろしくお願いします!!!!

シングルトンパターンは、オブジェクトが一度作成され、異なるスレッド/アプリケーション間で共有される場合に一般的に役立ちます。プリンターのプロパティロードクラスを実装している場合を考えます。

現在、プリンタはバリアントプロパティにすることができます。例:-モノプリンター、カラープリンター、自動スキャナーサポートプリンターなど...

起動するたびに、この設定ファイルをロードして、UIのいくつかのボタン/アプリケーション(タブまたは任意のプリンターUI)を有効にする必要があります。

サポートされている機能の値は、機能がサポートされている場合は1、サポートされていない場合は0などの構成テーブルの形式で保存されます。

サポートされている機能に基づいて、UIの特定の機能とアプリケーションを無効にします。単一の会社が製造したプリンターの場合、この構成ファイルの場所は常に固定パスに保存されます。

ファイルの値は、次のシナリオでのみ変更されるか、読み取り専用になります。-起動時。 2.新しいハードウェア周辺機器の追加または削除時。

シングルトンクラスを使用して、構成ファイルの読み取りを実装できます。同じ値、つまり、設定はUIの介入では変更されず、ハードウェアの介入でのみ変更できます。

これは、シングルトンデザインパターンをどこで実装できるかを考える1つの例です。

1
netblogger

Singleton Patternは、たとえばWebアプリケーションで構成をロードするために使用できます。サーバーのどこかに保存されるファイルを生成することになっています。現在、その場所はシングルトンクラスを使用して構成ファイル(プロパティファイル)から取得できます。場所は一意であり、今後頻繁に変更される可能性があるため、アプリケーションをデプロイせずに変更できるように構成ファイルを使用します変更を反映し、場所はアプリケーション全体でグローバルで一意になります

1
Akhil Gupta

PureMVCを使用するアプリケーションで、シングルトン(実際には2、3個)を使用しました。このフレームワークが導入した複雑さに不満でした(mvcレイヤーを介してメソッド呼び出しを追跡するために複雑になり、階層化されました)。そのため、レイヤーをよりよく分離するために、中央のシングルトンをメディエーターとして使用しました。

0
Max Leske

シングルトンクラスは、クラスのインスタンス化を1つだけ許可する必要がある場合に基本的に使用されます。実世界の例では、OOPライブラリの設計の場合、ライブラリクラスをシングルトンクラスとして作成できます。

0
Vishal Kumar