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

推薦する

MySQLデータベースの名前を高速かつ安全に変更する方法(3種類)

目次MySQLデータベースの名前を変更する方法最初の方法: データベースの名前を変更することは非推奨...

Docker による Oracle 11g イメージ構成のプルに関する詳細なチュートリアル

さっそくAlibaba の oracle11g イメージをプルして構成する docker の記録を開...

axios でリクエストをキャンセルし、重複リクエストを防ぐ方法について簡単に説明します。

目次序文コア - キャンセルトークン実用的なアプリケーションとパッケージングいくつかの小さな詳細序文...

MySQL リンクを表示し、異常なリンクを削除する方法

序文:データベースの運用や保守の際には、リンクの総数がいくつあるか、アクティブなリンクがいくつあるか...

Mysql マルチテーブル結合クエリの実行の詳細について簡単に説明します。

まず、このブログのケースデモンストレーション テーブルを作成します。 create table a(...

VMware 仮想マシンのネットワークの問題の解決方法

目次1. 問題の説明2. 問題解決1. 仮想マシンシステムのインストール時にネットワークがない場合2...

Linux で Redis のリモート接続を実装する方法

LinuxにRedisをインストールしたら、Javaを使って接続します。Javaコードは次のとおりで...

MacOS Catalina アップグレード後の VMware ブラック スクリーン問題に対する完璧な解決策の詳細な説明

MacOS Catalina アップグレード後の VMware ブラック スクリーンに対する完璧なソ...

JSでよく使われるデータ処理方法

目次DOM処理配列方法要約するDOM処理DOM はドキュメントの構造化された表現を提供し、スクリプト...

MySQLチュートリアルDMLデータ操作言語の例の詳細な説明

目次1. データ操作言語 (DML) 2. データを追加する(挿入) 3. 既存のテーブルをコピーし...

Apache Bench で Web ストレス テストを実装する方法

1. Apache Benchの紹介ApacheBench は、Apache サーバーに付属する W...

jsでシンプルなパズルゲームを実現する

この記事では、簡単なパズルゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な...

独自の Docker イメージを作成して Dockerhub にアップロードする方法

1. まず、自分のdockerhubアカウントを登録します。登録アドレス: https://hub....

JS配列メソッドの詳細な説明

目次1. 元の配列が変更されます1. プッシュ(): 2.ポップ(): 3. シフト(): 4.un...

MySQLがOracleのnvlと同様の機能を持つことができるかどうかについての簡単な議論

isnullの代わりにifnullを使用するisnull は、null かどうかを判断するために使用...