シングルトン モードの利点: 1. すべてのオブジェクトが唯一のインスタンスにアクセスすることを保証できる; 2. クラスがインスタンス化プロセスを制御するため、クラスはインスタンス化プロセスを柔軟に変更できる; 3. インスタンスが 1 つしかないためたとえば、メモリのオーバーヘッドとシステム パフォーマンスのオーバーヘッドが削減されます。
#シングルトン パターンは、デザイン パターンの最も単純な形式の 1 つです。このパターンの目的は、クラスのオブジェクトをシステム内の唯一のインスタンスにすることです。これを実現するには、クライアント側でインスタンスを作成することから始めます。したがって、オブジェクト クラスの一意のインスタンスの生成のみを許可し、生成されるオブジェクトへのすべてのアクセスを「ブロック」するメカニズムを使用する必要があります。ファクトリ メソッドを使用して、インスタンス化プロセスを制限します。クラスのインスタンスに別の一意のインスタンスを生成しても意味がないため、このメソッドは静的メソッド (クラス メソッド) である必要があります。
シングルトン モードの動機
システム内の一部のクラスでは、インスタンスを 1 つだけ持つことが重要です。たとえば、システム内に複数の印刷タスクが存在する場合があります。ただし、動作タスクは 1 つだけ、システムに存在できるウィンドウ マネージャーまたはファイル システムは 1 つだけ、システムに存在できるタイミング ツールまたは ID (シリアル番号) ジェネレーターは 1 つだけです。たとえば、Windows では、開くことができるタスク マネージャーは 1 つだけです。ウィンドウ オブジェクトを一意化するメカニズムを使用しない場合、複数のウィンドウがポップアップします。これらのウィンドウに表示される内容がまったく同じである場合、それらは重複オブジェクトとなり、メモリ リソースが無駄に消費されます。これらのウィンドウに表示される内容に一貫性がない場合、これは、ある時点でシステムに複数の状態があり、現実と矛盾しており、どれが実際の状態であるかわからないユーザーに誤解を引き起こす可能性があることを意味します。したがって、システム内のオブジェクトの一意性、つまりクラスのインスタンスは 1 つだけであることを保証することが非常に重要になる場合があります。 [2]
クラスにインスタンスが 1 つだけあり、このインスタンスに簡単にアクセスできるようにするにはどうすればよいでしょうか?グローバル変数を定義すると、いつでもオブジェクトにアクセスできるようになりますが、複数のオブジェクトのインスタンス化が妨げられるわけではありません。より良い解決策は、クラス自体にその唯一のインスタンスの保存を担当させることです。このクラスは、他のインスタンスが作成されないことを保証し、インスタンスにアクセスするメソッドを提供します。これがシングルトン パターンの背後にあるパターンの動機です。
シングルトン モードの重要なポイント
シングルトン モードには明らかに 3 つの主要なポイントがあります。1 つ目は、クラスはインスタンスを 1 つだけ持つことができること、2 つ目は、このインスタンスを作成する必要があることです。 3 番目に、このインスタンスをシステム全体に独自に提供する必要があります。
具体的な実装の観点から見ると、次の 3 つの点があります: まず、シングルトン モード クラスはプライベート コンストラクターのみを提供します。第 2 に、クラス定義にはクラスの静的なプライベート オブジェクトが含まれます。第 3 に、クラスは静的なパブリック オブジェクトを提供します。独自の静的プライベート オブジェクトを作成または取得するための関数。
以下のオブジェクト図には「シングルトン オブジェクト」があり、「顧客 A」、「顧客 B」、「顧客 C」はシングルトン オブジェクトの 3 つの顧客オブジェクトです。ご覧のとおり、すべての顧客オブジェクトはシングルトン オブジェクトを共有します。そして、シングルトン オブジェクトからそれ自体への接続線から、シングルトン オブジェクトがそれ自体への参照を保持していることがわかります。
一部のリソース マネージャーは、シングルトン モードで設計されることがよくあります。
コンピュータ システムでは、管理する必要があるリソースには、ソフトウェア外部リソースが含まれます。たとえば、各コンピュータには複数のプリンタを搭載できますが、2 つの印刷ジョブがコンピュータに出力されるのを防ぐために、プリンタ スプーラは 1 つしか搭載できません。同時にプリンターも。各コンピュータには複数の FAX カードを搭載できますが、2 つの FAX ジョブが同時に FAX カードに転送される状況を避けるために、FAX カードの管理は 1 つのソフトウェアのみで行う必要があります。各コンピュータは複数の通信ポートを持つことができ、システムはこれらの通信ポートを集中管理して、1 つの通信ポートが 2 つの要求によって同時に呼び出されないようにする必要があります。
管理する必要があるリソースには、ソフトウェアの内部リソースが含まれます。たとえば、ほとんどのソフトウェアには、システム構成を保存する 1 つ (または複数) のプロパティ ファイルがあります。このようなシステムでは、プロパティ ファイルを管理するオブジェクトを持たせる必要があります。
管理する必要があるソフトウェアの内部リソースには、Web サイトへの訪問者数を記録するコンポーネント、ソフトウェア システムの内部イベントやエラー メッセージを記録するコンポーネント、またはチェックを行うコンポーネントも含まれます。システムのパフォーマンス。これらのコンポーネントは一元的に管理する必要があり、複数のコンポーネントを作成することはできません。
これらのリソース マネージャー コンポーネントはインスタンスを 1 つだけ持つ必要があり (1 つ目)、コンポーネント自体を初期化する必要がある (2 つ目)、システム全体が自身へのアクセスを許可されている (3 つ目)。したがって、これらはすべてシングルトン パターンの条件を満たしており、シングルトン パターンの適用です。
推奨チュートリアル: 「PHP」
以上がシングルトンパターンの利点は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。