導入
作成モードと同様に、オブジェクトを作成する場合(工場の製品と見なされる)、オブジェクトを作成するために特定のクラスを指定する必要はありません。
工場パターンは、オブジェクトを作成するためのインターフェイスを定義し、このインターフェイスはサブクラスによって決定され、どのクラスをインスタンス化します。このパターンは、クラスのサブクラスへのインスタンス化を遅らせます。サブクラスは、作成時に独自のオブジェクトタイプを指定するために、インターフェイスメソッドをオーバーライドできます。
このモードは、特に多くの設定ファイルに依存するなど、オブジェクトのプロセス割り当てを作成する場合に非常に便利です。また、プログラムに工場の方法が表示されることがよくあります。これは、作成する必要があるオブジェクトタイプをサブクラスクラスに定義するようにします。
文章
次の例では、ファクトリーメソッドを使用した第26章のコンストラクターパターンコードの改良バージョン:
コードコピーは次のとおりです。
var car =(function(){
var car = function(モデル、年、マイル){
this.model = model;
this.year = year;
this.miles = miles;
};
return関数(モデル、年、マイル){
新しい車(モデル、年、マイル)を返します。
};
})();
var tom = New Car( "Tom"、2009、20000);
var dudu = new car( "dudu"、2010、5000);
理解しにくい場合は、別の例を挙げましょう。
コードコピーは次のとおりです。
var productmanager = {};
ProductManager.CreateProducta = function(){
console.log( 'producta');
}
ProductManager.CreateProductb = function(){
console.log( 'productb');
}
ProductManager.Factory = function(typetype){
New ProductManagerを返し[TypeType];
}
ProductManager.Factory( "CreateProducta");
まだ理解していない場合は、より詳細にしましょう。いくつかの要素をWebページに挿入したい場合、これらの要素がタイプで固定されていない場合、それらは写真、接続、またはテキストでさえある場合があります。工場パターンの定義によれば、工場クラスと対応するサブクラスを定義する必要があります。まず、サブクラスの特定の実装(つまり、サブ機能)を定義しましょう。
コードコピーは次のとおりです。
var page = page || {};
page.dom = page.dom || {};
//サブ機能1:テキストの処理
page.dom.text = function(){
this.insert = function(where){
var txt = document.createTextNode(this.url);
where.appendChild(TXT);
};
};
//サブ機能2:リンクの処理
page.dom.link = function(){
this.insert = function(where){
var link = document.createelement( 'a');
link.href = this.url;
link.appendChild(document.createTextNode(this.url));
where.appendChild(link);
};
};
//サブ機能3:写真の処理
page.dom.image = function(){
this.insert = function(where){
var im = document.createelement( 'img');
im.src = this.url;
where.appendChild(im);
};
};
では、工場処理機能をどのように定義しますか?それは実際には非常に単純です:
コードコピーは次のとおりです。
page.dom.factory = function(type){
新しいpage.dom [type]を返します。
}
それを使用する方法は次のとおりです。
コードコピーは次のとおりです。
var o = page.dom.factory( 'link');
o.url = 'http://www.cnblogs.com';
O.insert(document.body);
この時点で、誰もが工場モデルの導入をすでに理解していると信じているので、もう説明しません。
要約します
工場モードを使用するタイミング
工場モデルは、次のシナリオで特に役立ちます。
1.オブジェクトの構築は非常に複雑です
2。さまざまなインスタンスを作成するには、特定の環境に頼る必要があります
3.同じ属性を持つ多数の小さなオブジェクトを処理する
工場モードを使用しないでください
工場モデルを乱用しないでください。コードに不必要な複雑さを追加するだけで、テストを実行することが難しくなります。