工厂模式

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

//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也就不同了

 

posted @ 2014-08-25 11:25  曹桦伟  阅读(128)  评论(0编辑  收藏  举报