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

推薦する

MySQL thread_stack 接続スレッドの最適化

MySQL は、ネットワーク経由だけでなく、名前付きパイプ経由でも接続できます。MySQL への接続...

CentOS 6.4 で rpm を使用して MySQL をオフラインでインストールする

rpmインストールパッケージを使用してmysqlをオフラインでインストールします。参考までに準備:公...

Linux で FTP イメージ サーバーをインストールして展開する方法

Linux で FTP サーバーを設定するためのチュートリアルを参照してください https://w...

sqlite3 から mysql に移行するときに起こりうる問題のコレクション

簡単な説明適切な読者: モバイル開発sqlite3 データを mysql に移行する場合、多くの構文...

Linux Dig コマンドの使用法

発掘紹介: Dig は、Unix ライクなコマンドライン モードで NS レコード、A レコード、M...

Linux で PHP を 5.6 にアップグレードする実用的な方法

1: ターミナルに入ったらPHPのバージョンを確認する php -v出力は次のようになります。 PH...

Linux で rsync を使用する方法

目次1. はじめに2. インストール3. 基本的な使い方3.1、-rパラメータ3.2、-aパラメータ...

Linuxはjoin -a1を使用して2つのファイルを結合します

次の2つのファイルを結合するには、それらを結合して1.txtに結合します。 # 1.txt ジェリー...

CSS3を使用してボタンホバーフラッシュダイナミック特殊効果コードを実装する

CSS3 の列シリーズ属性を使用してウォーターフォールレイアウトを作成する方法を紹介しました。興味の...

JSプロトタイプとプロトタイプチェーンについての簡単な説明

目次1. プロトタイプ2. プロトタイプポインタ: __proto__要約する1. プロトタイプJa...

無効と読み取り専用の機能と違い

1: readonly は、このコントロールをロックして、インターフェイス上で変更できないようにしま...

Docker を使用した war パッケージ プロジェクトのデプロイの実装

Docker で war をデプロイするには、コンテナを使用する必要があります。ここでは tomca...

CSSの高さの崩壊問題についての簡単な説明

パフォーマンス例えば: HTML: <div class="first"&...

Vueはソースコード付きのリファレンスライブラリのメソッドを使用します

monaco-editor-vueの公式ソースコードは次のとおりです。インデックス 'mon...

Linux での Jenkins の詳細なインストール手順

目次1. JDKをインストールする2. Jenkinsをインストールする3. Jenkinsの設定を...