JavaScript ファクトリーパターンの説明

JavaScript ファクトリーパターンの説明

シンプルファクトリー

ここに画像の説明を挿入

//バスケットボール基本クラス var Basketball = function() {
    this.intro = 'バスケットボールはアメリカで人気があります';
}
バスケットボール.プロトタイプ = {
    getMember: 関数() {
        console.log('各チームには5人のプレイヤーが必要です');
    },
    getBallSize: 関数() {
        console.log('バスケットボールはとても大きいです');
    }
}
//フットボール基本クラス var Football = function() {
    this.intro = 'サッカーは世界中で人気があります';
}
フットボール.プロトタイプ = {
    getMember: 関数() {
        console.log('各チームには11人のプレイヤーが必要です');
    },
    getBallSize: 関数() {
        console.log('フットボールはとても大きいです');
    }
}
//スポーツファクトリー var SportsFactory = function(name) {
    スイッチ (名前) {
        'NBA'の場合:
            新しい Basketball() を返します。
        ケース 'worldCup':
            新しい Football() を返します。
    }
}
//ワールドカップ用のサッカーボールを作成する必要がある場合は、スポーツ ファクトリ sportsFactory を呼び出して作成するだけです。var Footnall = SportsFactory('worldCup');
console.log(Footnall);
console.log(Footnall.intro);
Footnall.getMember();

ここに画像の説明を挿入

ここに画像の説明を挿入

//ファクトリーモード関数createBook(name, time, type) {
    var o = new Object(); //オブジェクトを作成し、オブジェクトのプロパティとメソッドを展開します //これは異なる部分です o.name = name; //書籍名 o.time = time; //書籍の出版時期 o.type = type; //書籍の種類 //以下は類似部分です o.getName = function() {
        コンソールにログ出力します。
    };
    //オブジェクトを返します return o;
}
// 2 冊の本を作成します var book1 = new createBook('JS book', 2021, 'js');
var book2 = new createBook('CSS book', 2019, 'css');
book1.getName();
book2.getName();

ここに画像の説明を挿入

ここに画像の説明を挿入

ファクトリーメソッド

ここに画像の説明を挿入

var デモ = function() {}
デモ.プロトタイプ = {
    表示: 関数() {
        console.log('正常に取得されました');
    }
}
var d = new Demo();//インスタンスを正しく作成 d.show(); //正常に取得 var d = Demo();//インスタンスの作成エラー d.show(); //爆発

ここに画像の説明を挿入

ここに画像の説明を挿入

var デモ = 関数() {
    if (!this instanceof Demo){//これが何を指しているかを判断します。 return new Demo();
    }
}
デモ.プロトタイプ = {
    表示: 関数() {
        console.log('セーフモードクラスは本当に便利です');
    }
}
var d = デモ();
d.表示();

ここに画像の説明を挿入

安全な工場方法

//セーフモードでファクトリークラスを作成する var Factory = function(type, content) {
    if (このインスタンスのファクトリー) {
        var s = new this[type](content);
        s を返します。
    } それ以外 {
        新しいファクトリー(type, content)を返します。
    }
}
//ファクトリープロトタイプ内のすべてのタイプのデータオブジェクトを作成するための基本クラスを設定します。Factory.prototype = {
    java: 関数(コンテンツ) {
        //...
    },
    UI: 関数(コンテンツ) {
        this.content = コンテンツ;
        (関数() {
            var div = document.createElement('div');
            div.innerHTML = コンテンツ;
            div.style.border = '1px solidd red';
            document.getElementById('コンテナ').appendChild(div);
        })(コンテンツ);
    },
    php: 関数(コンテンツ) {
        //...
    },
    javascript: 関数(コンテンツ) {
        //..
    }
};
//オブジェクトを作成 var data = [
    { type: 'javascript', content: 'どのjsが最適か' },
    { タイプ: 'java'、コンテンツ: 'どの Java が最適か' },
    { type: 'UI', content: 'どの UI が最適か' }
];
for (let index = 0; index < data.length; index++) {
    console.log(データ[インデックス].type);
    ファクトリー(データ[インデックス].type、データ[インデックス].content);
}

ここに画像の説明を挿入

アブストラクトファクトリー

ここに画像の説明を挿入

var 車 = 関数() {}
車プロトタイプ = {
    価格を取得する: 関数() {
        return new Error('抽象メソッドを呼び出すことができません');
    },
    取得速度: 関数() {
        return new Error('抽象メソッドを呼び出すことができません');
    }
};

ここに画像の説明を挿入

//抽象ファクトリーメソッド var VehicleFactory = function(subType, superType) {
    //抽象クラスが抽象ファクトリー内に存在するかどうかを判断します if (typeof VehicleFactory[superType] === 'function') {
        //キャッシュクラス関数 F() {};
        //親クラスのプロパティとメソッドを継承する F.prototype = new VehicleFactory[superType]();
        //サブクラスのコンストラクターをサブクラスにポイントします。subType.constructor = subType;
        //サブクラスのプロトタイプは親クラスを継承します。subType.prototype = new F();
    } それ以外 {
        //抽象クラスが存在しない場合は、new Error('抽象クラスは作成されませんでした') をスローします。
    }
};
//車の抽象クラスVehicleFactory.Car = function() {
    this.type = '車';
}
VehicleFactory.Car.プロトタイプ = {
    価格を取得する: 関数() {
        return new Error('抽象メソッドを呼び出すことができません');
    },
    スピードを取得する: 関数() {
        return new Error('抽象メソッドを呼び出すことができません');
    }
};
//バス抽象クラス VehicleFactory.Bus = function() {
    this.type = 'バス';
}
VehicleFactory.Bus.プロトタイプ = {
    価格を取得する: 関数() {
        return new Error('抽象メソッドを呼び出すことができません');
    },
    getPassengerNum: 関数() {
        return new Error('抽象メソッドを呼び出すことができません');
    }
}

ここに画像の説明を挿入

//抽象と実装//BMW車のサブクラス var BMW = function(price, speed) {
    this.price = 価格;
    this.speed = 速度;
};
//抽象ファクトリは、Car 抽象クラスの継承を実装します。VehicleFactory(BMW, 'Car');
BMW.prototype.getPrice = function() { // メソッドを書き換えて、this.price を返します。
}
BMW.prototype.getSpeed ​​= 関数(){
    this.speed を返します。
};
//宇通バスのサブクラス var YUTONG = function(price, passage) {
    this.price = 価格;
    this.passenger = 乗客;
};
//抽象ファクトリは、BUS 抽象クラスの継承を実装します。VehicleFactory(YUTONG, 'Bus');
YUTONG.prototype.getPrice = 関数() {
    this.price を返します。
}
YUTONG.prototype.getPassengerNum = 関数() {
    this.passenger を返します。
};
//クラスをインスタンス化します var myBMW = new BMW('100w', '1000km/h');
コンソールにログ出力します。

ここに画像の説明を挿入

ここに画像の説明を挿入

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • js シンプルファクトリーモードの使用例
  • JavaScript デザインパターンにおけるファクトリーパターンと抽象ファクトリーパターンの定義と使用法の分析
  • JavaScript デザイン パターン - シンプルなファクトリー パターンの原則と応用例
  • JavaScript デザイン パターン - ファクトリー パターンの原則とアプリケーションの例
  • JS デザイン パターン: ファクトリー パターンの定義と実装の簡単な分析
  • JavaScript の 3 つのファクトリーパターンの使用方法を共有する

<<:  XHTML: フレーム構造タグ

>>:  Mysql の使用法の概要

推薦する

VUEはトークンログイン認証を実装

この記事では、トークンログイン認証を実装するためのVUEの具体的なコードを例として紹介します。具体的...

HTMLはBaidu百科事典のナビゲーションドロップダウンメニュー機能を模倣します

HTML は、Baidu 百科事典のナビゲーション ドロップダウン メニュー機能を模倣します。具体的...

yum の基本的な使い方と例(推奨)

yumコマンドYum (フルネームは Yellow dog Updater, Modified) ...

Ubuntu 14.04 で QT5 をインストール、設定、アンインストールするための詳細な手順

1. 以前 QT5.13 バージョンをダウンロードしましたが、インストール後、Qtcreator を...

MySQLデータベーステーブルの定期バックアップの実装の詳細な説明

Mysqlデータベーステーブルの定期的なバックアップの実装0. 背景実際の開発環境では、フロントエン...

MySQL ストアド プロシージャのクエリ コマンドの概要

以下のように表示されます。 mysql.proc から名前を選択します (db='データベー...

WeChatアプレットはビデオプレーヤーのビデオコンポーネントを使用します

この記事の例では、WeChatアプレットのビデオプレーヤーコンポーネントの具体的なコードを参考までに...

React でのポータルとエラー境界処理の実装

目次ポータルエラー境界処理エラー境界を使用しない場合はどうなりますか?注記ポータルスロットとも言えま...

IE6 の select を div でカバーできないバグの解決方法

div を使用してマスクを作成したり、ポップアップ ウィンドウをシミュレートしたりします。ただし、I...

Navicat が MySql サーバーにリモート接続できない問題の解決策

Navicat が MySql サーバーにリモート接続できない問題の解決策は、先頭に書かれています:...

CSS3で蓮の花が咲くアニメーション効果を実現

まずは効果を見てみましょう:この効果は非常に華やかに見えますが、原理は複雑ではありません。1 枚の花...

ウェブページの要素の検査とソースコードの表示の違いについて

Chrome ブラウザで Web ページを開くと、ページを右クリックすると 2 つの非常によく似たオ...

JavaScript コンストラクタとプロトタイプの関係

目次1. コンストラクタとプロトタイプ1. コンストラクター2. コンストラクタ問題3. コンストラ...

HTML テーブル セルの幅と高さを設定する方法

Web ページを作成するときに、テーブルの幅が揃っていないという問題に遭遇することがよくあります。 ...

Linux で SVN サーバーをインストールする方法

1. Yumのインストール yum でサブバージョンをインストール 2. 構成1. 倉庫を作る/ho...