所謂的工廠模式,顧名思義就是成批量地生產模式。它的核心做用也是和現實中的工廠同樣利用重複的代碼最大化地產生效益。在javascript中,它經常用來生產許許多多相同的實例對象,在代碼上作到最大的利用。
工廠模式定義建立對象的接口,可是讓子類決定實例化哪一個類。工廠方法將類的實例化延遲到子類
javascript
首先是建立構造函數,區別物種的不一樣屬性。html
//定義人的構造函數
var man = function(o) {
this.foots = o.foot || 2;
this.legs = o.legs || 2;
}
//定義魚的構造函數
var fish = function(o) {
this.qi = o.qi || 4;
this.foots = o.foots || 9;
}
//定義外星人的構造函數
var et = function(o) {
this.legs = o.legs ||10;
this.eyes = o.eyes || 6;
}
複製代碼
接下來咱們再建立一個工廠的構造函數:java
//工廠函數的構造函數
var F = function() {}
複製代碼
接着在原型上設置它的默認方法:設計模式
//f的默認輸出實例函數;
F.prototype.vehicleClass = man;
複製代碼
此時,該工廠函數默認生產的是man的實例,在不配置的狀況下咱們產生的是人類的實例,而後咱們對vehicleClass這個函數進行擴充,生成一個新的函數,此函數能夠對不一樣的類別進行甄別,bash
//類的甄別函數
F.prototype.vehicleCreate = function(o) {
switch(o.vehicleType) {
case 'man' :
this.vehicleClass = man;
break;
case 'fish' :
this.vehicleClass = fish;
break;
case 'et' :
this.vehicleClass = et;
break;
}
//返回實例
return this.vehicleClass(o);
}
複製代碼
經過swith語句的索引,能夠經過vehicleType
進行不一樣類的實例化。那麼咱們看看這個類是如何工做的。首先時實例工廠類.函數
var Factory = new F();
複製代碼
而後調用vehicleCreate
方法,經過傳參獲取不一樣實例的對象。ui
var Man = Factory.vehicleCreate({
vehicleType : 'man',
legs : 2,
foots : 2
});
複製代碼
這樣,經過vehicleType
的值,咱們能夠告訴工廠類咱們但願輸出的物種,而後經過其餘的屬性,咱們能夠控制該物種實例的各類基礎屬性。this
工廠模式適用於如下場景:spa
工廠模式實現起來較爲簡單,不單單是工廠模式,幾乎全部模式的代碼看起來都比較簡單。設計模式其實就是把常常用到的代碼概括總結系統的表達而已。在以後的應用中,咱們能夠系統地去想到這些模式而且運用它們。設計模式更表明的是一種系統思想,而不是重複的代碼堆砌。prototype