站長資訊網
        最全最豐富的資訊網站

        es6有工廠模式嗎

        es6有工廠模式;工廠模式將邏輯封裝到一個函數中,在es6中可以不使用構造函數創建對象,而使用class配合static關鍵字將簡單工廠封裝到User類的靜態方法中,語法為“class User{構造器}static 靜態方法(){}”。

        es6有工廠模式嗎

        本教程操作環境:windows10系統、ECMAScript 6.0版、Dell G3電腦。

        es6有工廠模式嗎

        ES6中給我們提供了class新語法,雖然class本質上是一顆語法糖,并也沒有改變JavaScript是使用原型繼承的語言,但是確實讓對象的創建和繼承的過程變得更加的清晰和易讀。下面我們使用ES6的新語法來重寫上面的例子。

        ES6重寫簡單工廠模式

        使用ES6重寫簡單工廠模式時,我們不再使用構造函數創建對象,而是使用class的新語法,并使用static關鍵字將簡單工廠封裝到User類的靜態方法中:

        //User類 class User {   //構造器   constructor(opt) {     this.name = opt.name;     this.viewPage = opt.viewPage;   }   //靜態方法   static getInstance(role) {     switch (role) {       case 'superAdmin':       return new User({ name: '超級管理員', viewPage: ['首頁', '通訊錄', '發現頁', '應用數據', '權限管理'] });         break;       case 'admin':         return new User({ name: '管理員', viewPage: ['首頁', '通訊錄', '發現頁', '應用數據'] });         break;       case 'user':         return new User({ name: '普通用戶', viewPage: ['首頁', '通訊錄', '發現頁'] });         break;       default:         throw new Error('參數錯誤, 可選參數:superAdmin、admin、user')     }   } }  //調用 let superAdmin = User.getInstance('superAdmin'); let admin = User.getInstance('admin'); let normalUser = User.getInstance('user');

        工廠模式是最常見的一種開發模式,將new操作單獨封裝,當遇到new是應考慮工廠模式。創建對象,不暴露代碼邏輯,把邏輯寫到函數里面。這個函數就是工廠模式。優點,簡單。 缺點就是,每增加構造函數,都要修改函數里面的代碼邏輯。

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

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

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

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

        代碼如下:

        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個或

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产午夜精品一区理论片| 国产精品久久久久乳精品爆| 精品国产免费一区二区三区香蕉 | 日韩精品成人a在线观看| 成人区精品一区二区不卡| 青草青草久热精品视频在线观看| 午夜精品成年片色多多| 992tv精品视频tv在线观看| 亚洲中文久久精品无码ww16| 精品福利一区二区三区精品国产第一国产综合精品 | 亚洲欧美日韩精品专区| 精品亚洲视频在线观看| 92精品国产自产在线观看| 国产成人精品免费视频大| 久热这里只有精品12| 亚洲精品成人无限看| 亚欧洲精品在线视频免费观看 | 国产免费久久精品丫丫| 四虎影视国产精品永久在线| 国产原创精品视频| 99香蕉国产精品偷在线观看| 日韩精品专区AV无码| 亚洲日韩精品无码专区网站| 欧美日韩精品一区二区视频| 免费短视频软件精品一区二区| 国产精品狼人久久久久影院 | 久久91综合国产91久久精品| 97精品一区二区视频在线观看| 精品性影院一区二区三区内射| 亚洲AV永久纯肉无码精品动漫 | 久久99精品久久久久久hb无码| 亚洲码国产精品高潮在线| 亚洲国产精品自产在线播放| 亚欧乱色国产精品免费视频| 下载天堂国产AV成人无码精品网站 | 久久精品国产99国产电影网 | 国产成人精品日本亚洲专| 国产精品欧美一区二区三区不卡 | 日韩精品一区二区三区色欲AV| 老汉精品免费AV在线播放| 亚洲国产成人一区二区精品区|