この記事では、シングルトン設計パターンを実装する方法と、アプリケーションでこのパターンを使用する理由とタイミングについて説明します。 「シングルトン」という名前が示すように、このメソッドを使用すると、クラスの単一のオブジェクトを作成できます。
このデザイン パターンについて Wikipedia が何と言っているか見てみましょう:
シングルトン パターンは、クラスのインスタンス化を 1 つのオブジェクトに制限する設計パターンです。これは、システム全体の動作を調整するためにオブジェクトが 1 つだけ必要な場合に便利です。
上記の定義で述べたように、どのクラスでも 1 つだけのオブジェクトを作成する必要があることを確認したい場合は、そのクラスにシングルトン パターンを実装する必要があります。
p>
オブジェクトを 1 つだけ作成できるクラスをなぜ実装する必要があるのかと疑問に思われるかもしれません。このデザインパターンは多くのユースケースに適用できると思います。これらには、構成クラス、セッション クラス、データベース クラスなどが含まれます。
この記事では、データベース クラスを例に挙げます。まず、このようなクラスにシングルトン パターンが実装されていない場合にどのような問題が発生する可能性があるかを見ていきます。
###質問######リーリー 上記のコード例では、このクラスのオブジェクトが作成されるたびに、データベースとの接続が確立されることがわかります。したがって、開発者がこのクラスのオブジェクトを複数の場所に作成する場合、データベース サーバーとの間に作成される (同じ) データベース接続の数を想像してください。
したがって、開発者は知らず知らずのうちに、データベースとアプリケーション サーバーの速度に大きな影響を与える間違いを犯してしまいます。このクラスのさまざまなオブジェクトを作成して、同じことを見てみましょう。
リーリー
上記のコードの出力と出力を見ると、各オブジェクトに新しいリソース ID が割り当てられ、すべてのオブジェクトが新しい参照となり、個別のメモリも割り当てられることがわかります。このようにして、アプリケーションは実際には必要のないリソースを知らず知らずのうちに占有することになります。###解決######
開発者が基礎となるフレームワークをどのように使用するかは、私たちの制御の範囲外です。コード レビュー プロセスが開始されると、それは私たちの管理下にありますが、開発中は常に彼らをサポートできるわけではありません。
このパターンを実装する際の目標は、1 つのクラスのオブジェクトを一度にのみ作成できるようにすることです。以下にクラスコードを追加させてください。その後、クラスの各部分を詳しく見ていきます。 リーリー
上記のクラスがシングルトン クラスであることを示す兆候はほとんどありません。 1 つ目はプライベート コンストラクターで、new キーワードを使用したオブジェクトの作成を防ぎます。もう 1 つの兆候は、作成されたオブジェクトへの参照を保持する静的メンバー変数です。
リーリー両方の部分の出力を比較すると、シングルトン モードの出力では、オブジェクト リソース ID がすべての異なるオブジェクトで同じであることがわかります。ただし、デザインパターンを使用しない場合はこの限りではありません。
アンチパターンとしてのシングルトン
このデザイン パターンは、さまざまな理由からアンチ パターンとも呼ばれます。これについては以下で説明します。
独自の作成とライフサイクルの品質を制御するため、単一責任の原則に違反します。
これにより、アプリケーションにグローバル状態が導入されます。どのコードでも値が変更される可能性があるため、グローバル状態は非常に悪いと言えます。したがって、デバッグ中にコードのどの部分が現在のステージのグローバル変数になっているかを見つけるのは困難です。
###結論は######
以上がシングルトン パターン: 効率性を考慮した設計の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。