JavaScript のシングルトン デザイン パターン

JavaScript のシングルトン デザイン パターン

序文:

デザインパターンはプログラミングにおいて非常に重要です。

デザイン パターンは、経験豊富なオブジェクト指向ソフトウェア開発者が一般的に採用しているベスト プラクティスを表します。デザイン パターンは、ソフトウェア開発プロセス中にソフトウェア開発者が直面する一般的な問題に対する解決策です。これらのソリューションは、かなりの期間にわたって多数のソフトウェア開発者が試行錯誤した結果です。

現在、デザインパターンを学んでいるのですが、皆さんも一緒に学んでみませんか?

1. デザインパターンとは何ですか?

ソフトウェア設計において、特定の問題に対する簡潔かつエレガントな解決策。

これまでの経験を要約し、それを特定のシナリオに合理的に適用することで、実際の問題を解決できます。

2. デザインパターンの5つの設計原則(SOLID)

S-単一責任原則

つまり、プログラムは 1 つのことだけを適切に実行します。

O-オープンクローズ原則

拡張は可能だが、変更は不可能

L-リスコフ置換原理

サブクラスは親クラスをオーバーライドし、親クラスが表示される場所に表示されます。

I-インターフェース独立原則

インターフェースを単一かつ独立に保つ

D-依存性は原則につながる

使用方法はインターフェースのみに焦点を当てており、特定のクラスの実装には焦点を当てていません。

3. デザインパターンはなぜ必要なのでしょうか?

読みやすさ

デザインパターンを使用すると、コードの可読性が向上し、その後の開発効率が向上します。

スケーラビリティ

デザイン パターンを使用してコードを分離すると、コードの変更可能性と拡張性が大幅に向上します。

再利用性

デザインパターンを使用すると、同じ作業を繰り返さずに既存のソリューションを再利用できます。

信頼性

デザイン パターンを使用すると、システムの堅牢性が向上し、コードの記述が真にエンジニアリング指向になります。

4. シングルトンパターン

定義:ユニークかつグローバルにアクセス可能。クラスにインスタンスが 1 つだけあることを確認し、そのインスタンスへのグローバル アクセス ポイントを提供します。

もう 1 つのマルチインスタンス パターンは、1 つのクラスを通じて複数の異なるインスタンスを構築することです。これがマルチインスタンス パターンです。

シングルトン モードとマルチインスタンス モードの最も重要な違いは、インスタンスの数です。

シングルトン パターンには常にインスタンスが 1 つだけ存在し、それをキャッシュして再利用できます。

アプリケーション シナリオ:ログイン ポップアップ ウィンドウなど、キャッシュできるコンテンツ。

これがプロジェクト内で 2 回以上使用される可能性がある場所であれば、これを試してみると、コードを大幅に削減できると思います。

次の疑似コードを見てみましょう:

const creatLoginLayer = () => {
    div 要素を document.createElement("div");
    div.innerHtml = "ログインフローティングウィンドウ";
    div.style.display = "なし";
    ドキュメントのbodyに子要素を追加します。
    div を返します。
};

document.getElementById("loginBtn").onclick = () => {
    const loginLayer = creatLoginLayer();
    loginLayer.style.display = "ブロック";
};

creatLoginLayerの機能は、ログインポップアップウィンドウを作成し、そのノードをbodyに追加することです。以下は、ログインボタンのクリックイベントです。ログインボタンをクリックすると、ログインポップアップウィンドウが作成され、 display noneからblockに変更して表示します。

このロジックには何の問題もありませんが、考えてみてください。これらのコードは、ログイン ボタンがクリックされるたびに実行されます。プロジェクト内にこれを必要とする場所が多数ある場合はどうなるでしょうか。上に挙げた行はほんの数行です。もしそれが何百、何千、あるいは何万もあったらどうなるでしょうか?パフォーマンスが大幅に低下しませんか? このようなときに、シングルトン モードが役立ちます。

シングルトン パターンを使用した後:

const getSingle = (fn) => {
    結果を出す;
    戻り値 (...残り) => {
        結果を返します || (result = fn.apply(this.rest));
    };
};

const creatLoginLayer = () => {
    div 要素を document.createElement("div");
    div.innerHtml = "ログインフローティングウィンドウ";
    div.style.display = "なし";
    ドキュメントのbodyに子要素を追加します。
    div を返します。
};

シングルログインレイヤーを作成します。

document.getElementById("loginBtn").onclick = () => {
    const loginLayer = createSingleLoginLayer();
    loginLayer.style.display = "ブロック";
};

ご覧のとおり、 getSingle関数が追加されています。ここではクロージャの概念があります。 result変数は参照されている限り破棄されず、キャッシュの役割を果たします。関数のパラメータはfunctionです。 resultnullまたはundefined場合、後続のロジックが実行され、渡された関数の戻り値、つまり div がresultに割り当てられます。このように、後続の関数は 1 回だけ実行する必要があります。次に呼び出されたときには、 resultに値があるため、後続のロジックを実行せずに直接返されます。

これで、 JavaScriptのシングルトンパターン設計パターンに関するこの記事は終了です。JavaScript JavaScriptシングルトンパターンの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript デザインパターン --- シングルトンパターンの詳細解説 [4つの基本形式]
  • JS デザイン パターン: シングルトン パターンの定義と実装の簡単な分析
  • JavaScript デザインパターン - シングルトンパターンの原則とアプリケーション例の分析
  • jsデザインパターンにおけるシングルトンパターンの原理と使用法の詳細な説明
  • JSは、デザインパターンのシングルトンパターンに基づいて、データの追加、削除、変更、クエリ機能のカプセル化を実装します。
  • JS デザインパターン: シングルトンパターン (I)
  • JavaScript デザインパターンにおけるシングルトンパターンの理解

<<:  Tomcat サーバーの応答が遅い場合の解決策

>>:  MySQLを監視するためのbinlogログ解析ツールの詳しい説明:Canal

推薦する

Linux (Ubuntu 18.04) に vim エディタをインストールする方法

デスクトップ システムをダウンロードするには、Ubuntu の公式 Web サイト (https:/...

MySQL で 2 つのデータベース テーブル構造を比較する方法

開発およびデバッグのプロセスでは、新しいコードと古いコードの違いを比較する必要があります。比較には、...

ウェブ画像形式としてPNG、JPG、GIFを選択して使用する方法

では、GIF、PNG、JPG のどの形式を候補形式として選択すればよいのでしょうか。また、どの画像形...

Winows Server 2019 アクティベーション コードとボリューム ライセンス エディション KMS インストール キー GVLK

最近、社内文書の整理とファイルサーバーの構成を予定しています。以前はサーバー2003を使い慣れていま...

CSS変数var()の使い方を理解する必要があります

Web プロジェクトがどんどん大きくなると、CSS は天文学的な大きさと複雑さを増します。この問題を...

CentOS の起動時に RabbitMq ソフトウェアを自動的に起動する方法

1. /etc/init.dディレクトリに新しいrabbitmqを作成します。 [root@loca...

Ubuntu20.04 VNCのインストールと設定の実装

VNC はリモート デスクトップ プロトコルです。 VNC を使用して Ubuntu 20.04 を...

SQL における参照整合性の詳細な説明 (1 対 1、1 対多、多対多)

1. 参照整合性参照整合性とは、主に外部キー制約を使用した複数のテーブル間の設計を指します。複数テ...

Linuxにgitをインストールする方法

1. はじめにGit は、規模の大小を問わずあらゆるプロジェクトを俊敏かつ効率的に処理するために使用...

テキストエリアの使用に関する注意事項

なぜテキストエリアについて具体的に言及するのでしょうか?なぜなら、textarea ノードは実際には...

生年月日を年齢に変換し、グループ化して人数を数えるMySQLの例

データベースのクエリ `学生`から*を選択 クエリ結果id名前誕生日1張三1970-10-01 2李...

jsはaudioContextを通じて3Dサウンド効果を実現します

この記事では、audioContextを介して3Dサウンド効果を実現するためのjsの具体的なコードを...

ドラミング効果を実現するJavascript

この記事では、ドラミング効果を実現するためのJavascriptの具体的なコードを参考までに紹介しま...

Vueはツリーテーブルを実装する

この記事では、ツリーテーブルを実装するためのVueの具体的なコードを例として紹介します。具体的な内容...

MySQL 8.0.13 手動インストールチュートリアル

この記事では、MySQL 8.0.13の手動インストールチュートリアルを参考までに紹介します。具体的...