js デザイン パターン: 状態パターンとは何ですか? JS ステート モードの概要
この記事では、JS デザイン パターンに関するコンテンツを提供します: 状態パターンとは何ですか? js ステータス モードの概要には一定の参考値があります。必要な方は参考にしていただければ幸いです。
ステートモードとは何ですか?
定義: モノの内部の各状態をクラスにカプセル化すると、内部状態の変化によって異なる動作が生成されます。
主な解決策: オブジェクトの動作はその状態 (プロパティ) に依存し、その状態の変化に応じて関連する動作を変更できます。
いつ使用するか: コードには、オブジェクトの状態に関連する多数の条件文が含まれています。
解決方法: さまざまな特定のステータスクラスを抽象化します。
JS 状態モードの適用例: 1. バスケットボールをプレイするとき、アスリートは通常状態、異常状態、超常状態を持つことができます。 2. Zeng Hou Yi のチャイムでは、「ベルは抽象的なインターフェイス」、「Zhong A」などは具体的な状態、「Zeng Hou Yi のチャイム」は特定の環境 (コンテキスト) です。
js state モードの利点: 1. 変換ルールをカプセル化します。 2. 考えられる状態を列挙します。状態を列挙する前に、状態のタイプを決定する必要があります。 3. 特定の状態に関連するすべての動作をクラスに入れると、オブジェクトの動作を変更するためにオブジェクトの状態を変更するだけで、新しい状態を簡単に追加できます。 4. 状態遷移ロジックを、巨大な条件文ブロックの代わりに状態オブジェクトと統合できるようにします。 5. 複数の環境オブジェクトが状態オブジェクトを共有できるため、システム内のオブジェクトの数が減ります。
js ステート モードの欠点: 1. ステート モードを使用すると、システム クラスとオブジェクトの数が必然的に増加します。 2. ステート モードの構造と実装は比較的複雑です。不適切に使用すると、プログラムの構造とコードが混乱する可能性があります。 3. 状態モードは、状態を切り替えることができる「開始および終了原理」をあまりサポートしていません。新しい状態クラスを追加するには、状態変換を担当するソース コードを変更する必要があります。そうしないと、新しい状態クラスに切り替えることができません。状態と変更 特定の状態クラスの動作には、対応するクラスのソース コードの変更も必要です。
js 状態モードの使用シナリオ: 1. 状態の変化に応じて動作が変化するシナリオ。 2. 条件文と分岐文の置き換え。
注: 動作が状態によって制限されており、状態が 5 つ以下である場合は、状態パターンを使用します。
シーンデモ
あるブランドの電灯、ボタンを1回押すと弱い光が点灯し、ボタンを2回押すと強い光が点灯し、ボタンを3回押すと光が消えます。
// 将状态封装成不同类 const weakLight = function(light) { this.light = light } weakLight.prototype.press = function() { console.log('打开强光') this.light.setState(this.light.strongLight) } const strongLight = function(light) { this.light = light } strongLight.prototype.press = function() { console.log('关灯') this.light.setState(this.light.offLight) } const offLight = function(light) { this.light = light } offLight.prototype.press = function() { console.log('打开弱光') this.light.setState(this.light.weakLight) } const Light = function() { this.weakLight = new weakLight(this) this.strongLight = new strongLight(this) this.offLight = new offLight(this) this.currentState = this.offLight // 初始状态 } Light.prototype.init = function() { const btn = document.createElement('button') btn.innerHTML = '按钮' document.body.append(btn) const self = this btn.addEventListener('click', function() { self.currentState.press() }) } Light.prototype.setState = function(state) { // 改变当前状态 this.currentState = state } const light = new Light() light.init() // 打开弱光 // 打开强光 // 关灯
状態パターンの非オブジェクト指向実装
JavaScript の委任メカニズムを利用して、状態パターンを次のように実装できます:
const obj = { 'weakLight': { press: function() { console.log('打开强光') this.currentState = obj.strongLight } }, 'strongLight': { press: function() { console.log('关灯') this.currentState = obj.offLight } }, 'offLight': { press: function() { console.log('打开弱光') this.currentState = obj.weakLight } }, } const Light = function() { this.currentState = obj.offLight } Light.prototype.init = function() { const btn = document.createElement('button') btn.innerHTML = '按钮' document.body.append(btn) const self = this btn.addEventListener('click', function() { self.currentState.press.call(self) // 通过 call 完成委托 }) } const light = new Light() light.init()
関連推奨事項:
js デザイン パターン: デコレータ パターンとは? jsデコレーターパターンの紹介
jsデザインパターン: メディエーターパターンとは何ですか? JSメディエーターパターンの紹介
以上がjs デザイン パターン: 状態パターンとは何ですか? JS ステート モードの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

エントリーレベルのタイプスクリプトチュートリアルをマスターしたら、TypeScriptをサポートするIDEで独自のコードを作成し、JavaScriptにコンパイルできるはずです。このチュートリアルは、TypeScriptのさまざまなデータ型に飛び込みます。 JavaScriptには、NULL、未定義、ブール値、数字、文字列、シンボル(ES6によって導入)とオブジェクトの7つのデータ型があります。 TypeScriptはこれに基づいてより多くのタイプを定義し、このチュートリアルではすべてを詳細に説明します。 ヌルデータ型 JavaScriptのように、Typescriptのnull
