WEB开发网
开发学院WEB开发Jsp javascript设计模式之工厂模式 阅读

javascript设计模式之工厂模式

 2010-01-11 21:13:55 来源:WEB开发网   
核心提示: 在看本文章之前,建议先看看这篇文章javascript设计模式之单体模式 ,javascript设计模式之工厂模式,毕竟个人感觉循序渐进的好, 工厂模式分为简单工厂模式和复杂工厂模式,然后在子类中创建工厂方法,从而把成员对象的实例化推迟到更专门的子类当中,前者是使用一个类来生成实例,通常是一个单体
 在看本文章之前,建议先看看这篇文章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关键字及具体的类,可以把所有的实例代码集中到一个位置。

使用工厂模式,你可以先创建一个抽象的父类,然后在子类中创建工厂方法,从而把成员对象的实例化推迟到更专门的子类当中,他可以有效的防止代码重复。

Tags:javascript 设计模式 工厂

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接