用ES6創建一個簡單工廠模式


1 什么是工廠模式?

工廠模式是用來創建對象的一種最常用的設計模式。我們不暴露創建對象的具體邏輯,而是將將邏輯封裝在一個函數中,那么這個函數就可以被視為一個工廠。工廠模式根據抽象程度的不同可以分為:簡單工廠,工廠方法和抽象工廠。

如果只接觸過JavaScript這門語言的的人可能會對抽象這個詞的概念有點模糊,因為JavaScript一直將abstract作為保留字而沒有去實現它。如果不能很好的理解抽象的概念,那么就很難理解工廠模式中的三種方法的異同。所以,我們先以一個場景去簡單的講述一下抽象和工廠的概念。

1.1 簡單工廠模式

簡單工廠模式又叫靜態工廠模式,由一個工廠對象決定創建某一種產品對象類的實例。主要用來創建同一類對象。

在實際的項目中,我們常常需要根據用戶的權限來渲染不同的頁面,高級權限的用戶所擁有的頁面有些是無法被低級權限的用戶所查看。所以我們可以在不同權限等級用戶的構造函數中,保存該用戶能夠看到的頁面。在根據權限實例化用戶。代碼如下:

class SuperAdmin{
  constructor(){
    this.name = "超級管理員";
    this.viewPage = ['首頁', '通訊錄', '發現頁', '應用數據', '權限管理'];
  }
}
class Admin{
  constructor(){
    this.name = "管理員";
    this.viewPage = ['首頁', '通訊錄', '發現頁', '應用數據', '權限管理'];
  }
}
class NormalUser{
  constructor(){
    this.name = "普通用戶";
    this.viewPage = ['首頁', '通訊錄', '發現頁', '應用數據', '權限管理'];
  }
}

//工廠方法類
class UserFactory {
  getFactory(role){
   switch (role) {
     case 'superAdmin':
       return new SuperAdmin();
       break;
     case 'admin':
       return new Admin();
       break;
     case 'user':
       return new NormalUser();
       break;
     default:
       throw new Error('參數錯誤, 可選參數:superAdmin、admin、user');
   }
  }
 }
 
//調用
let uesr =new UserFactory();
uesr.getFactory('superAdmin');
uesr.getFactory('admin');
uesr.getFactory('user');

 

簡單工廠的優點在於,你只需要一個正確的參數,就可以獲取到你所需要的對象,而無需知道其創建的具體細節。但是在函數內包含了所有對象的創建邏輯(構造函數)和判斷邏輯的代碼,每增加新的構造函數還需要修改判斷邏輯代碼。當我們的對象不是上面的3個而是30個或更多時,這個函數會成為一個龐大的超級函數,便得難以維護。所以,簡單工廠只能作用於 創建的對象數量較少,對象的創建邏輯不復雜時使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM