ホームページ > バックエンド開発 > PHPチュートリアル > シングルトン パターン: 効率性を考慮した設計

シングルトン パターン: 効率性を考慮した設計

PHPz
リリース: 2023-08-31 13:54:01
オリジナル
1013 人が閲覧しました

シングルトン パターン: 効率性を考慮した設計

この記事では、シングルトン設計パターンを実装する方法と、アプリケーションでこのパターンを使用する理由とタイミングについて説明します。 「シングルトン」という名前が示すように、このメソッドを使用すると、クラスの単一のオブジェクトを作成できます。

このデザイン パターンについて Wikipedia が何と言っているか見てみましょう:

シングルトン パターンは、クラスのインスタンス化を 1 つのオブジェクトに制限する設計パターンです。これは、システム全体の動作を調整するためにオブジェクトが 1 つだけ必要な場合に便利です。

上記の定義で述べたように、どのクラスでも 1 つだけのオブジェクトを作成する必要があることを確認したい場合は、そのクラスにシングルトン パターンを実装する必要があります。

p>

オブジェクトを 1 つだけ作成できるクラスをなぜ実装する必要があるのか​​と疑問に思われるかもしれません。このデザインパターンは多くのユースケースに適用できると思います。これらには、構成クラス、セッション クラス、データベース クラスなどが含まれます。

この記事では、データベース クラスを例に挙げます。まず、このようなクラスにシングルトン パターンが実装されていない場合にどのような問題が発生する可能性があるかを見ていきます。

###質問######

非常に単純なデータベース接続クラスを想像してください。このクラスのオブジェクトを作成すると、データベースへの接続が作成されます。

リーリー 上記のコード例では、このクラスのオブジェクトが作成されるたびに、データベースとの接続が確立されることがわかります。したがって、開発者がこのクラスのオブジェクトを複数の場所に作成する場合、データベース サーバーとの間に作成される (同じ) データベース接続の数を想像してください。

したがって、開発者は知らず知らずのうちに、データベースとアプリケーション サーバーの速度に大きな影響を与える間違いを犯してしまいます。このクラスのさまざまなオブジェクトを作成して、同じことを見てみましょう。

リーリー

上記のコードの出力と出力を見ると、各オブジェクトに新しいリソース ID が割り当てられ、すべてのオブジェクトが新しい参照となり、個別のメモリも割り当てられることがわかります。このようにして、アプリケーションは実際には必要のないリソースを知らず知らずのうちに占有することになります。

###解決######

開発者が基礎となるフレームワークをどのように使用するかは、私たちの制御の範囲外です。コード レビュー プロセスが開始されると、それは私たちの管理下にありますが、開発中は常に彼らをサポートできるわけではありません。

この状況を克服するには、基本クラスが 1 つのクラスの複数のオブジェクトを作成できないようにする必要があり、代わりに、既に作成されたオブジェクト (存在する場合) を提供します。この場合、基本クラスのシングルトン パターンの開発を検討する必要があります。

このパターンを実装する際の目標は、1 つのクラスのオブジェクトを一度にのみ作成できるようにすることです。以下にクラスコードを追加させてください。その後、クラスの各部分を詳しく見ていきます。 リーリー

上記のクラスがシングルトン クラスであることを示す兆候はほとんどありません。 1 つ目はプライベート コンストラクターで、new キーワードを使用したオブジェクトの作成を防ぎます。もう 1 つの兆候は、作成されたオブジェクトへの参照を保持する静的メンバー変数です。

リーリー

両方の部分の出力を比較すると、シングルトン モードの出力では、オブジェクト リソース ID がすべての異なるオブジェクトで同じであることがわかります。ただし、デザインパターンを使用しない場合はこの限りではありません。

アンチパターンとしてのシングルトン

このデザイン パターンは、さまざまな理由からアンチ パターンとも呼ばれます。これについては以下で説明します。

独自の作成とライフサイクルの品質を制御するため、単一責任の原則に違反します。

これにより、アプリケーションにグローバル状態が導入されます。どのコードでも値が変更される可能性があるため、グローバル状態は非常に悪いと言えます。したがって、デバッグ中にコードのどの部分が現在のステージのグローバル変数になっているかを見つけるのは困難です。

  1. 単体テストを行う場合、シングルトンは一般的に悪い考えであり、単体テストを行わないのは一般的に悪い考えです。
  2. ###結論は######

  3. インターネット上で広く議論されているシングルトン設計パターンを説明するために最善を尽くしました。この記事がお役に立てば幸いです。このパターンの 2 つの側面、デザイン パターンとアンチパターンについて説明しました。

コメント、提案、質問を以下に投稿してください。できるだけ早く返信させていただきます。 Twitter @XpertDevelopers で私にご連絡いただくか、直接メールでご連絡いただくこともできます。

以上がシングルトン パターン: 効率性を考慮した設計の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート