Javascript デザインパターン理論とプログラミングの実践 シンプルなファクトリーパターン_JavaScript スキル
読書ディレクトリ
基本的な紹介
例を挙げてください
概要
単純なファクトリ パターンは、どのクラス インスタンスを作成するかを決定するメソッドを使用します。これらのインスタンスは多くの場合、同じインターフェイスを持ちます。このパターンは主に、インスタンス化される型がコンパイル時に決定できないが、実行中に状況が決定される場合に使用されます。期間。 簡単に言うと、会社のパントリーにある飲料自動販売機のようなもので、どのボタンを押すかによってコーヒーかミルクが決まります。
シンプルなファクトリ パターンは、Ajax オブジェクトを作成するときにも非常に役立ちます。
通常、オブジェクトを作成する最も一般的な方法は、 new キーワードを使用してコンストラクターを呼び出すことです。これにより、オブジェクト間に依存関係が生じます。ファクトリ パターンは、どのクラスをインスタンス化するかを決定するメソッドを使用して、クラス間の依存関係を排除するのに役立つ設計パターンです。この記事では、シンプル ファクトリ パターンの理論を詳細に紹介し、シンプル ファクトリ パターンの具体的なアプリケーションを説明します。
基本的な紹介
シンプルファクトリーパターンは、ファクトリーパターンの中で最も基本的なパターンです。ファクトリ クラスを定義すると、パラメータに基づいて特定の製品クラスがインスタンス化されます。
例
例を挙げて説明しましょう: 航空券、ホテル、その他の商品を販売する観光業界の Web サイトを開発するとします。ユーザーはチケットを購入する準備ができています。関連するクラスを次のように定義できます:
var productEnums = { flight: "flight", hotel: "hotel" }; function Flight() { console.log("This is Flight"); } function Hotel() { console.log("This is Hotel"); } function User() { this.shopCart = []; } User.prototype = { constructor: User, order: function (productType) { var product = null; switch (productType) { case productEnums.flight: product = new Flight(); case productEnums.hotel: product = new Hotel(); default: } this.shopCart.push(product); } } var user = new User(); user.order(productEnums.flight);
このコードは、ユーザー クラス User、チケット クラス Flight、ホテル クラス Hotel の 3 つのクラスを定義します。User には予約メソッドが含まれます。ユーザーは予約時に商品の種類を直接入力することができます。一見するとこのコードに問題はありませんが、ニーズやビジネスは常に変化します。会社のビジネスが拡大し、ビザ サービスが追加された場合は、ビザをサポートするように User クラスを変更する必要があります。もちろんこれを行うこともできますが、User クラスを直接変更することの何が問題なのでしょうか? もっと良い方法はありますか?
最初に説明したいのは User クラスです。このクラスはユーザー クラスを表します。ユーザー クラスは特定の種類のビジネスとは本質的に無関係です。つまり、ビジネスはいつでも増加する可能性があります。ただし、ユーザーはビジネスとは何の関係もありません。コードは製品の注文を作成するものです。新しいビザ ビジネスは、既存の航空券やホテルと本質的には変わりません。ビジネスを追加するたびに User クラスを変更する必要がある場合、コードの安定性と保守性に大きな影響を与えるため、より良い解決方法があります。さまざまなビジネスを管理するための専用の注文作成クラスがあります。このクラスは単純なファクトリーです。
コードを次のように変更します:
var productFactory = (function () { var productFactories = { "flight": function () { return new Flight(); }, "hotel": function () { return new Hotel(); } }; return { createProduct: function (productType) { return productFactories[productType](); } } })(); User.prototype = { constructor: User, order: function (productType) { this.shopCart.push(productFactory.createProduct(productType)); } }
このコードには主に 2 つの変更があります:
(1) 異なる製品タイプに応じて異なるオブジェクトを返す製品ファクトリを追加しました
(2) Userクラスのorderメソッドを修正して、factoryクラスのcreate productメソッドを呼び出すようにします。
これを行うことの利点は次のとおりです:
(1) ユーザーの注文メソッドをより焦点を絞り、製品の予約機能のみを実行し、製品の注文を抽出して専用のファクトリー クラスに作成し、コードをより簡潔かつ明確にします
(2) プロダクト管理専用のファクトリー User クラスを変更することなく、新しいプロダクトを簡単に追加できます。
概要
2. ファクトリ クラス。渡されたパラメータに基づいて異なるオブジェクトを作成し、クラスを使用してオブジェクトを返します。異なるオブジェクトがある場合は、クラスを変更する必要があります。 🎜>
3. オブジェクトクラス、つまりさまざまなビジネスによって生成されたさまざまなクラスは、工場によって生産された製品です
シンプルなファクトリーモデルの利点
1. ファクトリ クラスはすべてのオブジェクトの作成を一元化し、オブジェクト作成の統合管理を容易にします
2. オブジェクトのユーザーは製品を使用するだけであり、単一の責任を負います
3. 拡張が簡単 新しいビジネスを追加する場合、ファクトリクラスに関連するビジネスオブジェクトクラスとビジネスオブジェクトを生成するメソッドを追加するだけで済み、他の箇所を変更する必要はありません。
適用可能なシナリオ
1. 異なるパラメータに従って異なるインスタンスを生成する必要があり、これらのインスタンスにはいくつかの共通のシナリオがあります
2. ユーザーは製品を使用するだけで済み、製品作成の詳細を知る必要はありません

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











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

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

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

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

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

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...
