創建型設計模式-簡單工廠模式
簡單工廠模式(Simple Factory):又稱之爲靜態工廠模式,由一個工廠對象創建某一種產品對象類的實例。主要用來創建同一類對象。
多類單實例法
爲了加深我們的理解,設定以下需求。假設一個大型超市賣各種東西,超市中有許多商品,例如食品類,電器類,運動類,傢俱類。當你去該超市買東西的時候,你只需要到固定類別下,詢問售貨員,他便能快速幫你介紹從而找到你想要的東西。
// 創建一個食品類, 含有類別,食品名,食品價格 ,食品產地
let Food = function(){
this.type = '食品';
this.name = '蘋果';
this.price = '5.83';
this.origin = '陝西'
}
Food.prototype = {
getPrice:function(){
return this.price;
},
getRoute:function(){
console.log('超市正門西邊過去')
},
getDescription:function(){
console.log('蘋果又甜又大');
}
}
// 創建一個家電類, 含有類別,傢俱名,傢俱價格 ,傢俱品牌
let ElectricalAppliances = function(){
this.type = '家電';
this.name = '智能TV';
this.price = '5600';
this.brand = '小米';
}
ElectricalAppliances.prototype = {
getPrice:function(){
return this.price;
},
getDescription:function(){
console.log('享受智能時代');
}
}
let Sports =function(){this.type = '運動';};
let Furniture = function(){this.type='傢俱'};
...
// 創建了這家超市的各種類別產品之後
// 我們使用簡單工廠模式來模擬讓售貨員去找到固定的產品
let SuperMarketFactory = function(type){
switch(type){
case '食品':return new Food();break;
case '家電':return new ElectricalAppliances();break;
case '運動': return new Sports();break;
case '傢俱': return new Furniture();break;
...
default :break;
}
}
// 這樣我們的顧客來詢問,只需要告訴類別,就可以創建對應實例了。
// 比如他需要買家電,那麼 只需要如此,我們就可以創建家電實例了。售貨員便可以告知他相關信息了。
let obj = new SuperMarketFactory('家電');
單對象代替多個類
此使用場景一般是在於該類中有很多共通方法時,創建相似對象。
let DialogFactory = function(type,content){
let o = new Object();
o.type = type;
o.content = content;
if(type === 'MODEL'){
// todo 模態框相關的UI渲染操作
}
if(type === 'ALERT'){
//todo 提示框相關的UI操作
}
// 將對象返回
return o;
}
// 創建一個模態框
let model = new DialogFactory('MODEL','恭喜登錄成功')
上述兩者方式,我們如何採用,取決於我們的業務需求。第一種方式創建的方式是通過類實例化創建對象的,第二種方式是通過創建一個對象,然後包裝增強其屬性和功能來實現的。前者,如果這些類(採用寄生式繼承方式)均繼承同一個類,則其父類的原型方法可以共用。後者,由於每個對象都是一個新的對象,所以方法是不能共用的。
參考書籍: 《JavaScript 設計模式》張容銘
同時大家也可參考這位讀者的觀後感