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 の使用法の概要

推薦する

Windows で削除された MySQL 8.0.17 のルート アカウントとパスワードを回復する方法

少し前にSQLの独学を終え、MySQL 8.0.17をダウンロードしました。インストールして設定した...

MySQL複合インデックスの詳細な研究

複合インデックス (結合インデックスとも呼ばれます) は、複数の列に対して作成されるインデックスです...

CSSのマッチング問題を解決する

問題の説明ご存知のとおり、CSS を記述する場合、HTML のクラスの定義または ID の定義に従っ...

MYSQLストアドプロシージャ、つまり一般的な論理知識のポイントの要約

MySQL ストアド プロシージャ1. ストアドプロシージャ構文(フォーマット)を作成する 区切り文...

JavaScriptでフロアナビゲーションエフェクトを作成するプロセスの詳細な説明

目次この期間の目標1. 関数の実装1.1 構造層1.2 スタイルレイヤー1.3 行動層1.3.1 フ...

Docker に Zookeeper を素早くインストールする方法の詳細なチュートリアル

Docker で Zookeeper を素早くインストール会社を変わってから長らくZookeeper...

最新バージョンMySQL5.7.19 解凍版インストールガイド

MySQL バージョン: MySQL Community Edition (GPL) ------ ...

Linux でプロセスを隠す方法と、遭遇する落とし穴

序文1. この記事で使用したツールは、https://github.com/gianlucabore...

シンプルな CSS テキストアニメーション効果

成果を達成する 実装コードhtml <div id=コンテナ> いらっしゃいませ <...

表の境界線の CSS 構文

<br />表の境界線の CSS 構文具体的な内容には、上境界線の幅、右境界線の幅、下境...

Vue で lodop 印刷コントロールを使用してブラウザ互換の印刷を実現する方法

序文このコントロールを直接印刷すると下部に透かしが入りますが、公式 Web サイトから購入することで...

Quill エディタでカスタム HTML レコードを挿入する詳細な例

もう2020年です。飢えた人間は単純なテキストでは満足できなくなり、さまざまなスタイルの派手なテキス...

ウェブデザイン研究における XHTML の応用の概要

<br />一般的に、「標準的な Web ページ」のファイル構成は XHTML CSS ...

Tomcat で複数の war パッケージを展開する方法と手順

1 背景JDK1.8-u181とTomcat8.5.53がインストールされました。インストール後、環...

ミニプログラムにより、製品属性の選択や仕様の選択が可能

この記事では、ミニプログラムで製品属性選択または仕様選択を実装するための具体的なコードを参考までに共...