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

推薦する

DPlayer.js ビデオ再生プラグインの使い方

DPlayer.jsビデオプレーヤープラグインは使いやすい主な用途: ビデオの再生、監視の開始、終了...

dockerでnginxを実行するときにdaemon offが使用される理由についての簡単な説明

とても嬉しいです。この問題に遭遇したとき、私はDockerコンテナのプロセス原理について話さなければ...

NavicatがMySQLに接続すると、10060、1045エラーとmy.iniの場所が報告されます。

Navicat は、データベースに接続するときにエラー 10060 および 1045 を報告します...

Tencent Cloud Serverをゼロから導入する方法

初めての投稿ですので、間違いや問題点などありましたら、コメント欄で指摘していただければ、今後改善させ...

MYSQL ログとバックアップおよび復元の問題の詳細な説明

この記事では、参考までにMYSQLログとバックアップとリストアについて紹介します。具体的な内容は以下...

Vueで背景色と透明度を設定する方法

背景色と透明度の設定上記のように、最初の画像の場合は、灰色の背景と左上隅に白い「カバー」という文字を...

Dockerコンテナは定期的にデータベースをバックアップし、指定されたメールボックスに送信します(設計アイデア)

目次1. 背景: 2. デザインのアイデア: 3. 起動スクリプトを書く4. イメージを構築する5....

etcd クラスターをデプロイするための docker-compose の実装手順

目次docker-compose.ymlを書くdocker-composeを実行するビルドステータス...

CocosCreator 入門チュートリアル: ネットワーク通信

ネットワーク通信の概要オンライン ゲームを開発する場合、必然的にネットワーク通信に対処する必要があり...

MySQL でデータをクエリし、条件に基づいて別のテーブルに更新する方法の例

この記事では、MySQL が条件に基づいてデータをクエリし、別のテーブルに更新する方法を例を使用して...

Nginx+Tomcat 負荷分散クラスタの実装例

目次導入1. 事例の概要2. 環境の展開3. Nginxホストのインストール4. Tomcatのイン...

vueはel-tableの列幅の適応を完璧に実現します

目次背景技術的ソリューション具体的な実装要約する背景Element UI は、PC で人気の Vue...

HTML テーブル マークアップ チュートリアル (42): テーブル ヘッダーの水平方向の配置属性 ALIGN

水平方向では、テーブル ヘッダーの配置を左、中央、右に設定できます。基本的な構文<TH ALI...

Mysqlトランザクション操作の失敗を解決する方法

Mysqlトランザクション操作の失敗を解決する方法トランザクションの原子性: トランザクションは、デ...