javascript設計模式之原廠模式

來源:互聯網
上載者:User

在看本文章之前,建議先看看這篇文章javascript設計模式之單體模式 ,畢竟個人感覺循序漸進的好。 

原廠模式分為簡單原廠模式和複雜原廠模式,前者是使用一個類來產生執行個體,通常是一個單體,後者是使用子類來決定一個成員變數是哪個類的具體執行個體,也就是簡單工廠包含在複雜工廠之中。

下面通過一個具體的執行個體來具體的說說這工廠的一二吧。

用Ajax技術發起非同步請求是現在web開發中的一個常見任務。 

 1 //implements AjaxHandler,建立一個複雜的工廠來執行Ajax的一系列流程,裡麵包含了兩個簡單工廠
 2 var SimpleHandler = function(){};
 3 
 4 SimpleHandler.prototype = {
 5 //第一個簡單工廠執行Ajax的建立,請求,發送。。。等
 6     request:function(method,url,callback,postVars){
 7         var xhr = this.createXhrObject();
 8         xhr.onreadystatechange = function(){
 9             if(xhr.readyState != 4) return;
10             (xhr.status == 200) ? 
11             //定義了一個全域對象callback來執行對返回參數的應用
12             callback.success(xhr.responseText,xhr.responseXML):
13             callback.failure(xhr.status);
14         };
15         xhr.open(method,url,true);
16         if(method != "POST") postVars = null;
17         xhr.send(postVars);
18     },
19 //第二個簡單工廠是根據不同的情建立XHR對象,不論什麼情況他都能返回一個正確的XHR對象
20     createXhrObject:function(){
21         var methods = [
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             try{
28                 methods[i]();
29             }catch(e){
30                 continue;
31             }
32             this.createXhrObject = methods[i]();
33             return methods[i]();
34         }
35         throw new Error("Error!");
36     }
37 }
38 

看到這裡,原廠模式大體就是對單體模式的進一步擴充和應用,上面的執行個體可以這樣來調用:

1 window.onload = function(){
2     var myHandler = new SimpleHandler();
3     var callback = {
4         success:function(responseText,responseXML){alert("Success:" + responseXML);},
5         failure:function(statusCode){alert("Failure" + statusCode);}
6     };
7     myHandler.request('GET','innerHTML.xml',callback);
8     
9 };//當然根據不同的情況,callback也就不同了

通過使用原廠模式而不是使用new關鍵字及具體的類,可以把所有的執行個體代碼集中到一個位置。

使用原廠模式,你可以先建立一個抽象的父類,然後在子類中建立Factory 方法,從而把成員對象的執行個體化延遲到更專門的子類當中,他可以有效防止代碼重複。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.