この記事を読む前に、この記事「JavaScript デザインパターンのシングルトンモード」を読むことをお勧めします。やはり、段階的に進めたほうが良いと個人的には思います。
ファクトリ パターンは、単純なファクトリ パターンと複雑なファクトリ パターンに分けられます。前者は、クラスを使用してインスタンスを生成します。後者は、サブクラスを使用して、メンバ変数がどのクラスの特定のインスタンスであるかを決定します。工場には複雑な工場が含まれます。
この工場について、具体的な例を通して詳しく説明しましょう。
Ajax テクノロジーを使用して非同期リクエストを開始することは、今日の Web 開発における一般的なタスクです。
1 //AjaxHandler を実装し、一連の Ajax プロセスを実行するための複雑なファクトリを作成します。これには 2 つの単純なファクトリが含まれます
2 var SimpleHandler = function(){};
3
4 SimpleHandler.prototype = {
5 //最初の単純なファクトリーは、Ajax の作成、要求、送信を実行します。 。 。待って
6 リクエスト:関数(メソッド、URL、コールバック、postVars){
7 var xhr = this.createXhrObject();
8 xhr.onreadystatechange = function(){
9 if(xhr.readyState != 4) 戻り値;
10 (xhr.status == 200) ?
11 //グローバル オブジェクト コールバックは、戻りパラメータの適用を実行するために定義されています
12 callback.success(xhr.responseText,xhr.responseXML):
13 コールバック.failure(xhr.status);
14};
15 xhr.open(メソッド,url,true);
16 if(メソッド != "POST") postVars = null;
17 xhr.send(postVars);
18}、
19 //2 番目の単純なファクトリは、さまざまな状況に応じて XHR オブジェクトを作成します。状況に関係なく、正しい XHR オブジェクトを返すことができます。
20 createXhrObject:function(){
21 var メソッド = [
22 function(){return new XMLHttpRequest();},
23 function(){return new ActiveXObject('Msxml2.XMLHttp');},
24 function(){return new ActiveXObject('Microsoft.XMLHttp');}
25];
26 for(var i = 0; i < 3; i++){
27 試してください{
28 メソッド[i]();
29 }キャッチ(e){
30 継続します。
31}
32 this.createXhrObject = メソッド[i]();
33 戻りメソッド[i]();
34}
35 throw new Error("エラー!");
36}
37 }
38
これを見ると、ファクトリ パターンは通常、単一のパターンをさらに拡張して適用したものであることがわかります。上記の例は次のように呼び出すことができます。
1 window.onload = function(){
2 var myHandler = new SimpleHandler();
3 var コールバック = {
4 success:function(responseText,responseXML){alert("Success:" + responseXML);},
5 失敗:function(statusCode){alert("Failure" + statusCode);}
6};
7 myHandler.request('GET','innerHTML.xml',callback);
8
9 };//もちろん、コールバックは状況に応じて異なります。
new キーワードと具象クラスを使用する代わりにファクトリ パターンを使用すると、すべてのインスタンス コードを 1 か所に集中化できます。
ファクトリ パターンを使用すると、最初に抽象親クラスを作成し、次にサブクラス内にファクトリ メソッドを作成することができます。これにより、メンバー オブジェクトのインスタンス化をより特殊なサブクラスに延期することができ、コードの重複を効果的に防ぐことができます。