js工厂模式

工厂模式定义一个用于创建对象的借口,这个借口由子类决定类实例化那一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候制定自己的对象类型(抽象工厂)。这个模式十分有用,尤其是创建对象的流程赋值的时候,比如依赖于很多设置文件等。并且,你会经常在程序里看到工厂方法,用于让子类类定义需要创建的对象类型。

var gongchang={};
gongchang.chanyifu=function(arg){
this.gongren=50;
alert("我们有"+this.gongren);
}
gongchang.chanxie=function(){
alert('产鞋子');
}

gongchang.yushu=function(){
alert('运输');
}
gongchang.changzhang=function(para){
return gongchang[para]();
}
var me=gongchang.changzhang('chanyifu');
alert(me.gongren);

工厂模式作用:
1.对象的构建十分复杂。
2.需要依赖具体的环境创建不同实例。
3.处理大量具有相同属性的小对象。
注意事项:不能滥用工厂,有时候仅仅是给代码增加复杂度。

简单工厂模式:只有一个抽象产品类

var XMLHttpFactory=function(){};
XMLHttpFactory.createXMLHttp=function(){
var XMLHttp=null;
if(window.XMLHttpRequest){
XMLHttp=new XMLHttpRequest();
}else if(window.ActiveXObject){
XMLHttp=new ActiveXObject('Microsoft.XMLHttp')
}
return XMLHttp;
}

var AjaxHander=function(){
var xml=XMLHttpFactory.createXMLHttp();
}

抽象工厂模式:有多个抽象产品类

var XMLHttpFactory=function(){};
XMLHttpFactory.prototype={
createFactory:function(){
throw new Error('This is an abstract class');
}
}
var XMLHandler=function(){
XMLHttpFactory.call(this); //改变this的指向
}
XMLHandler.prototype=new XMLHttpFactory();
XMLHandler.prototype.constructor=XMLHandler
XMLHandler.prototype.createFactory=function(){
var XMLHttp=null;
if(window.XMLHttpRequest){
XMLHttp=new XMLHttpRequest();
}else if(window.ActiveXObject){
XMLHttp=new ActiveXObject('Microsoft.XMLHttp')
}
return XMLHttp;
}

posted @ 2017-03-17 16:12  sungang  阅读(306)  评论(0编辑  收藏  举报