シングルトン設計パターンを実装する方法

Linda Hamilton
リリース: 2024-11-11 09:36:03
オリジナル
819 人が閲覧しました

導入

最近、Next.js アプリケーションで作業し、データベースに接続しているときに、データベースへの接続ポイントが 1 つも存在しないという間違いを犯してしまいました。その結果、データベースは複数回インスタンス化されました。私の記憶が正しければ、同じアプリ内で約 5 つのインスタンスが作成されました。コンピューターが熱くなり始め、効率が低下し、エンティティを処理するときに奇妙なエラーが発生するようになりました。じっくり考えた結果、データベースに接続するために作成された複数のインスタンスが問題の原因であることがわかりました。では、今後この問題を回避するにはどうすればよいでしょうか?

この問題を解決するために、コミュニティがどのようにこの問題に対処したかについて多くの調査を行った結果、私は完璧な解決策であるシングルトン作成パターンを発見しました。シングルトンは、クラス A が 1 回だけインスタンス化され、この単一のインスタンスがアプリケーション全体で共有されることを保証し、データベースへの単一の接続ポイントを提供します。このアプローチにより、重複やシステムの過負荷のリスクが回避されます。

この記事では、シングルトンがどのように機能するか、単一のインスタンスが必要な状況でシングルトンが非常に効果的である理由、および将来同様のエラーを回避するためにシングルトンを正しく実装する方法について説明します。

これから取り上げるセクション

  1. シングルトン パターンとは何ですか?
  2. シングルトンの実装方法
  3. シングルトンの実際の使用例
  4. シングルトン設計パターンが非常に重要な理由
  5. 結論 ## シングルトン パターンとは何ですか? シングルトン デザイン パターンは、Gang of Four の著書 「デザイン パターン: 再利用可能なオブジェクト指向ソフトウェアの要素」 で紹介された 5 つの作成パターンの 1 つです。これにより、アプリケーション内でクラスを複数回インスタンス化することができなくなります。つまり、インスタンスはアプリケーション全体で共有されます。これは、私が個人的に遭遇したデータベース接続の問題や集中管理された構成など、リソースが共有されている場合に役立ちます。

シングルトンはインスタンスの数を 1 つに制限することで重複を回避し、リソースを適切に管理できるようにすることで、アプリケーションの過負荷や不整合のリスクを軽減します。

シングルトンの実装方法

特定のクラスに一意のインスタンスが 1 つだけ存在するようにし、そのインスタンスへの単一のグローバル アクセス ポイントを確保するという問題を検討した結果、潜在的な解決策はシングルトン設計パターンを使用することにあります。ここで、この最適なソリューションを実装するために使用するロジックを見てみましょう:

  1. インスタンスの静的変数を定義します

    最初のステップは、クラスの一意のインスタンスを保持するプライベート静的変数を宣言することです。

  2. コンストラクターを保護

    他のクラスがクラスを直接インスタンス化できないように、クラス コンストラクターはプライベートにする必要があります。

明確にするためのクラス図の例を次に示します。

How to Implement the Singleton Design Pattern

そして、これが typescript での実装です:

class DatabaseConnection {
  // Step 1: Declare a static private instance
  private static instance: DatabaseConnection;

  // Private variable to hold the database connection
  private connection: string;

  // Step 2: Private constructor to prevent direct instantiation
  private constructor() {
    // Simulate establishing a database connection
    this.connection = 'Database connection established!';
    console.log(this.connection);
  }

  // Step 3: Public static method to get the single instance
  public static getInstance(): DatabaseConnection {
    if (!DatabaseConnection.instance) {
      DatabaseConnection.instance = new DatabaseConnection();
    }
    return DatabaseConnection.instance;
  }

  // You can add other methods
}

ログイン後にコピー

次に、インスタンスを作成して、何が起こるかを見てみましょう:

const db1 = DatabaseConnection.getInstance(); 
const db2 = DatabaseConnection.getInstance(); 
console.log(db1 === db2);
ログイン後にコピー

コンソールに何が表示されるかを見てみましょう:

How to Implement the Singleton Design Pattern

これは true を出力し、DatabaseConnection クラスが 1 回だけインスタンス化されたことを確認しました。

シングルトン設計パターンが非常に重要な理由

シングルトン設計パターンは、次のような将来の問題を回避するために重要です。

  1. 単一インスタンスを保証します

    これにより、アプリケーション全体でクラスのインスタンスが 1 つだけになることが保証されます。これは、構成やデータベース接続などの共有リソースにとって不可欠です。複数のインスタンスは、不整合やリソースの過剰な消費につながる可能性があります。

  2. インスタンスへのグローバル アクセス

    シングルトン パターンはインスタンスへのグローバル アクセスを提供し、アプリケーションのすべての部分が同じオブジェクトと対話できるようにし、アプリケーション全体の一貫性を確保します。

  3. リソース管理

    毎回新しいインスタンスを作成すると、メモリとパフォーマンスの面でコストがかかる可能性があります。シングルトンはインスタンスが 1 つだけ作成されることを保証し、データベース接続などのオーバーヘッドを削減します。

  4. 重複作業を防止

    複数のコンポーネントが同じリソースにアクセスする必要がある場合、シングルトンは 1 つのインスタンスのみが使用されるようにし、リソースの使用率を最適化します。

結論

このブログでは、Next.js アプリケーションの作業中に直面した、データベース接続の複数のインスタンスが作成され、システムの非効率性や奇妙なエラーが発生する問題について説明しました。この問題に対して私が見つけた解決策は、クラスが 1 回だけインスタンス化され、アプリケーション全体で単一の共有インスタンスが提供されるようにするシングルトン デザイン パターンでした。このパターンは、一元的な制御を維持することで、冗長性、リソースの過負荷、不一致を回避するのに役立ちます。

ブログの内容:

  1. シングルトン パターンとは:
  2. シングルトンの実装方法:
  3. シングルトンが重要な理由:
  4. 実際の例:

以上がシングルトン設計パターンを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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