工厂模式分为两种,一种是简单工厂模式。另一种称之为工厂模式。
简单工厂模式是使用一个外部的单体或者静态方法来生成实例。
而工厂模式使用子类来决定内部成员要实现那个具体的类的实例。
工厂模式要求被具体实现的类,必须提供相同的接口。
下面我们将通过一段代码来讲述一个简单工厂模式的实现。
function myMode(){ } myMode.prototype = { create:function(){ var mode = createmode.create(mode); mode.xxx();//可以对返回的mode执行任何你想要的操作 return mode; } } var createdmode = (function(){ //一个单例 return {
creaet:function(mode){ var tmpMode; switch(mode){ case 'mode1': tmpMode = new mode1(); break; case 'mode2': tmpMode = new mode2(); break; default: tmpMode = new defamode(); break; } checkMode(mode,[xxx,xxx,xxx,xxx,xxx]);//checkMode的作用是检查mode是否实现了后面的[xxx]方法,如果没实现将抛出异常 return tpmMode; }
} })(); function checkMode(obj,methods){ if(!(typeof obj == 'object')){ throw new Error("error"); } for(var i=0,len=methods.length;i<len;i++){ var method = methods[i]; if(!obj[method] || typeof object[method] !== 'function'){ throw new Error('error'); } } }
通过上面的代码,便实现了简单工厂模式。首先我们有一个myMode,他有一个create方法,这个方法将返回一个mode。
这个mode可以是任何对象。因为它是由一个外部单例所创造返回的mode。如果你想改变它,可以在外部单例里加入更多的case。
只要它实现了规定的接口,那么它就是符合的工厂模式的。是可以被myMode直接使用的。这一样以来,就可以把所有的mode集中在一起管理。
想要添加或者更改mode也变得容易。好了,简单工厂模式到此也就结束了。
下面是今天在某个群讨论时,看到的一段对工厂模式的描述的比较好的话。便顺手摘抄了下来
"后宫三千佳丽等待侍寝,大家都有名牌,一个太监把牌子拿上来,皇上翻,翻中一牌子给太监,太监去调这个女人(也许是男人),这个太监就相当于工厂,皇上给他参数,他根据参数去调用,但具体侍寝的事由后宫去实现,有的KJ,有的是XT,有的是TJ,有的是GJ,有的是XJ,各不相同"
不要问我那些字母代表什么意思,我想大家都懂的~~~~
不好意思,刚刚创建单例那里有点错误,已修正。