原廠模式分為兩種,一種是簡單原廠模式。另一種稱之為原廠模式。
簡單原廠模式是使用一個外部的單體或者靜態方法來產生執行個體。
而原廠模式使用子類來決定內部成員要實現那個具體的類的執行個體。
原廠模式要求被具體實現的類,必須提供相同的介面。
下面我們將通過一段代碼來講述一個簡單原廠模式的實現。
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,各不相同"
不要問我那些字母代表什麼意思,我想大家都懂的~~~~
不好意思,剛剛建立單例那裡有點錯誤,已修正。