Javascript設計模式之簡單工廠(一)

創建型設計模式-簡單工廠模式

簡單工廠模式(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 設計模式》張容銘
同時大家也可參考這位讀者的觀後感

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章