首页 > 代码库 > 工厂模式

工厂模式

工厂模式分为简单工厂模式和复杂工厂模式,前者是使用一个类来生成实例,通常是一个单体,后者是使用子类来决定一个成员变量是哪个类的具体实例,也就是简单工厂包含在复杂工厂之中。

//implements AjaxHandler,创建一个复杂的工厂来执行Ajax的一系列流程,里面包含了两个简单工厂var SimpleHandler = function(){};SimpleHandler.prototype = {//第一个简单工厂执行Ajax的创建,请求,发送。。。等    request:function(method,url,callback,postVars){        var xhr = this.createXhrObject();        xhr.onreadystatechange = function(){            if(xhr.readyState != 4) return;            (xhr.status == 200) ?             //定义了一个全局对象callback来执行对返回参数的应用            callback.success(xhr.responseText,xhr.responseXML):            callback.failure(xhr.status);        };        xhr.open(method,url,true);        if(method != "POST") postVars = null;        xhr.send(postVars);    },//第二个简单工厂是根据不同的情创建XHR对象,不论什么情况他都能返回一个正确的XHR对象    createXhrObject:function(){        var methods = [            function(){return new XMLHttpRequest();},            function(){return new ActiveXObject(‘Msxml2.XMLHttp‘);},            function(){return new ActiveXObject(‘Microsoft.XMLHttp‘);}        ];        for(var i = 0; i < 3; i++){            try{                methods[i]();            }catch(e){                continue;            }            this.createXhrObject = methods[i]();            return methods[i]();        }        throw new Error("Error!");    }}
window.onload = function(){    var myHandler = new SimpleHandler();    var callback = {        success:function(responseText,responseXML){alert("Success:" + responseXML);},        failure:function(statusCode){alert("Failure" + statusCode);}    };    myHandler.request(‘GET‘,‘innerHTML.xml‘,callback);    };//当然根据不同的情况,callback也就不同了

 

工厂模式