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

推薦する

vue3+ts+EsLint+Prettier 標準コード実装

目次使用EsLintの使用プロフィールを追加するPrettierの使用huskyとlint-stag...

Linux で NFS のワンクリック展開を実装する方法

サーバー情報管理サーバー: m01 172.16.1.61サーバー: nfs01 172.16.1....

HTML マークアップ言語 - リファレンス

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

Tomcat パイプライン モードのパイプラインとバルブの詳細な説明

序文比較的複雑な大規模システムでは、複雑なロジックで処理する必要があるオブジェクトまたはデータ フロ...

HTML テーブルタグチュートリアル (45): テーブル本体タグ

<tbody> タグは、テーブル本体のスタイルを定義するために使用されます。基本構文 &...

Zabbixについて管理者ログインパスワードを忘れた場合、パスワードをリセットする

Zabbix 管理者ログイン パスワードのリセットに関する問題は次のとおりです。 1. 問題の説明:...

一般的なCSS3アニメーションの実装方法

1. 何ですかCSS アニメーションは、CSS を使用して拡張マークアップ言語 (XML) 要素をア...

MySQL マルチバージョン同時実行制御 MVCC の実装

目次MVCCとはMVCC 実装MVCC はファントム リードを解決しますか? MVCCとはMVCC ...

Linux で FastDFS を使用してイメージ サーバーを構築する

目次サーバー計画1. システムコンポーネントをインストールする2. fastdfsをインストールする...

MySQLインデックスが失敗するいくつかの状況の分析

1. 最左プレフィックス原則 - 複数の列にインデックスが付けられている場合は、最左プレフィックス原...

Docker を使用して Jenkins をインストールするためのサンプル コード

Dockerコンテナのインストール時に遭遇しやすい2つの問題1.ポートはすでに割り当てられています(...

Web デザインにおける Less と More について語る (写真)

Less is More は多くのデザイナーのキャッチフレーズです。これは建築界の巨匠ルートヴィヒ...

SQL インジェクション脆弱性プロセスの例と解決策

コード例: パブリッククラスJDBCDemo3 { パブリック静的voiddemo3_1(){ bo...

Linux システムのパフォーマンスを分析するための top コマンドの詳細な説明

Linux topコマンドの紹介top コマンドは、Linux でよく使用されるパフォーマンス分析ツ...

初心者のためのWebページ作成: HTMLのハイパーリンクAタグの使い方を学ぶ

ハイパーリンク a タグはリンク ポイントを表し、英語の単語「anchor」の略語です。その機能は、...