工厂模式定义一个用于创建对象的借口,这个借口由子类决定类实例化那一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候制定自己的对象类型(抽象工厂)。这个模式十分有用,尤其是创建对象的流程赋值的时候,比如依赖于很多设置文件等。并且,你会经常在程序里看到工厂方法,用于让子类类定义需要创建的对象类型。
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=XMLHandlerXMLHandler.prototype.createFactory=function(){ var XMLHttp=null; if(window.XMLHttpRequest){ XMLHttp=new XMLHttpRequest(); }else if(window.ActiveXObject){ XMLHttp=new ActiveXObject('Microsoft.XMLHttp') } return XMLHttp;}