読書ディレクトリ
基本的な紹介
例を挙げてください
概要
単純なファクトリ パターンは、どのクラス インスタンスを作成するかを決定するメソッドを使用します。これらのインスタンスは多くの場合、同じインターフェイスを持ちます。このパターンは主に、インスタンス化される型がコンパイル時に決定できないが、実行中に状況が決定される場合に使用されます。期間。 簡単に言うと、会社のパントリーにある飲料自動販売機のようなもので、どのボタンを押すかによってコーヒーかミルクが決まります。
シンプルなファクトリ パターンは、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. ユーザーは製品を使用するだけで済み、製品作成の詳細を知る必要はありません