精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:說說你對工廠模式的理解?應用場景?

開發 前端
工廠模式是用來創建對象的一種最常用的設計模式,不暴露創建對象的具體邏輯,而是將將邏輯封裝在一個函數中,那么這個函數就可以被視為一個工廠。

[[432996]]

一、是什么

工廠模式是用來創建對象的一種最常用的設計模式,不暴露創建對象的具體邏輯,而是將將邏輯封裝在一個函數中,那么這個函數就可以被視為一個工廠

其就像工廠一樣重復的產生類似的產品,工廠模式只需要我們傳入正確的參數,就能生產類似的產品

舉個例子:

  • 編程中,在一個 A 類中通過 new 的方式實例化了類 B,那么 A 類和 B 類之間就存在關聯(耦合)
  • 后期因為需要修改了 B 類的代碼和使用方式,比如構造函數中傳入參數,那么 A 類也要跟著修改,一個類的依賴可能影響不大,但若有多個類依賴了 B 類,那么這個工作量將會相當的大,容易出現修改錯誤,也會產生很多的重復代碼,這無疑是件非常痛苦的事;
  • 這種情況下,就需要將創建實例的工作從調用方(A類)中分離,與調用方「解耦」,也就是使用工廠方法創建實例的工作封裝起來(「減少代碼重復」),由工廠管理對象的創建邏輯,調用方不需要知道具體的創建過程,只管使用,「而降低調用者因為創建邏輯導致的錯誤」;

二、實現

工廠模式根據抽象程度的不同可以分為:

  • 簡單工廠模式(Simple Factory)
  • 工廠方法模式(Factory Method)
  • 抽象工廠模式(Abstract Factory)

簡單工廠模式

簡單工廠模式也叫靜態工廠模式,用一個工廠對象創建同一類對象類的實例

假設我們要開發一個公司崗位及其工作內容的錄入信息,不同崗位的工作內容不一致

代碼如下:

  1. function Factory(career) { 
  2.     function User(career, work) { 
  3.         this.career = career  
  4.         this.work = work 
  5.     } 
  6.     let work 
  7.     switch(career) { 
  8.         case 'coder'
  9.             work =  ['寫代碼''修Bug']  
  10.             return new User(career, work
  11.             break 
  12.         case 'hr'
  13.             work = ['招聘''員工信息管理'
  14.             return new User(career, work
  15.             break 
  16.         case 'driver'
  17.             work = ['開車'
  18.             return new User(career, work
  19.             break 
  20.         case 'boss'
  21.             work = ['喝茶''開會''審批文件'
  22.             return new User(career, work
  23.             break 
  24.     } 
  25. let coder = new Factory('coder'
  26. console.log(coder) 
  27. let boss = new Factory('boss'
  28. console.log(boss) 

Factory就是一個簡單工廠。當我們調用工廠函數時,只需要傳遞name、age、career就可以獲取到包含用戶工作內容的實例對象

工廠方法模式

工廠方法模式跟簡單工廠模式差不多,但是把具體的產品放到了工廠函數的prototype中

這樣一來,擴展產品種類就不必修改工廠函數了,變成抽象類,也可以隨時重寫某種具體的產品

也就是相當于工廠總部不生產產品了,交給下轄分工廠進行生產;但是進入工廠之前,需要有個判斷來驗證你要生產的東西是否是屬于我們工廠所生產范圍,如果是,就丟給下轄工廠來進行生產

如下代碼:

  1. // 工廠方法 
  2. function Factory(career){ 
  3.     if(this instanceof Factory){ 
  4.         var a = new this[career](); 
  5.         return a; 
  6.     }else
  7.         return new Factory(career); 
  8.     } 
  9. // 工廠方法函數的原型中設置所有對象的構造函數 
  10. Factory.prototype={ 
  11.     'coder'function(){ 
  12.         this.careerName = '程序員' 
  13.         this.work = ['寫代碼''修Bug']  
  14.     }, 
  15.     'hr'function(){ 
  16.         this.careerName = 'HR' 
  17.         this.work = ['招聘''員工信息管理'
  18.     }, 
  19.     'driver'function () { 
  20.         this.careerName = '司機' 
  21.         this.work = ['開車'
  22.     }, 
  23.     'boss'function(){ 
  24.         this.careerName = '老板' 
  25.         this.work = ['喝茶''開會''審批文件'
  26.     } 
  27. let coder = new Factory('coder'
  28. console.log(coder) 
  29. let hr = new Factory('hr'
  30. console.log(hr) 

工廠方法關鍵核心代碼是工廠里面的判斷this是否屬于工廠,也就是做了分支判斷,這個工廠只做我能做的產品

抽象工廠模式

上述簡單工廠模式和工廠方法模式都是直接生成實例,但是抽象工廠模式不同,抽象工廠模式并不直接生成實例, 而是用于對產品類簇的創建

通俗點來講就是:簡單工廠和工廠方法模式的工作是生產產品,那么抽象工廠模式的工作就是生產工廠的

由于JavaScript中并沒有抽象類的概念,只能模擬,可以分成四部分:

  • 用于創建抽象類的函數
  • 抽象類
  • 具體類
  • 實例化具體類

上面的例子中有coder、hr、boss、driver四種崗位,其中coder可能使用不同的開發語言進行開發,比如JavaScript、Java等等。那么這兩種語言就是對應的類簇

示例代碼如下:

  1. let CareerAbstractFactory = function(subType, superType) { 
  2.   // 判斷抽象工廠中是否有該抽象類 
  3.   if (typeof CareerAbstractFactory[superType] === 'function') { 
  4.     // 緩存類 
  5.     function F() {} 
  6.     // 繼承父類屬性和方法 
  7.     F.prototype = new CareerAbstractFactory[superType]() 
  8.     // 將子類的constructor指向父類 
  9.     subType.constructor = subType; 
  10.     // 子類原型繼承父類 
  11.     subType.prototype = new F() 
  12.   } else { 
  13.     throw new Error('抽象類不存在'
  14.   } 

上面代碼中CareerAbstractFactory就是一個抽象工廠方法,該方法在參數中傳遞子類和父類,在方法體內部實現了子類對父類的繼承

三、應用場景

從上面可看到,簡單簡單工廠的優點就是我們只要傳遞正確的參數,就能獲得所需的對象,而不需要關心其創建的具體細節

應用場景也容易識別,有構造函數的地方,就應該考慮簡單工廠,但是如果函數構建函數太多與復雜,會導致工廠函數變得復雜,所以不適合復雜的情況

抽象工廠模式一般用于嚴格要求以面向對象思想進行開發的超大型項目中,我們一般常規的開發的話一般就是簡單工廠和工廠方法模式會用的比較多一些

綜上,工廠模式適用場景如下:

  • 如果你不想讓某個子系統與較大的那個對象之間形成強耦合,而是想運行時從許多子系統中進行挑選的話,那么工廠模式是一個理想的選擇
  • 將new操作簡單封裝,遇到new的時候就應該考慮是否用工廠模式;
  • 需要依賴具體環境創建不同實例,這些實例都有相同的行為,這時候我們可以使用工廠模式,簡化實現的過程,同時也可以減少每種對象所需的代碼量,有利于消除對象間的耦合,提供更大的靈活性

參考文獻

https://www.runoob.com/design-pattern/factory-pattern.html

https://juejin.cn/post/6844903653774458888

 

https://zhuanlan.zhihu.com/p/344119981

 

責任編輯:武曉燕 來源: JS每日一題
相關推薦

2021-11-05 07:47:56

代理模式對象

2021-11-09 08:51:13

模式命令面試

2021-11-10 07:47:49

組合模式場景

2021-11-11 16:37:05

模板模式方法

2021-11-22 23:50:59

責任鏈模式場景

2021-09-16 07:52:18

算法應用場景

2021-08-16 08:33:26

git

2021-11-04 06:58:32

策略模式面試

2021-09-28 07:12:09

測試路徑

2021-09-06 10:51:27

TypeScriptJavaScript

2021-09-29 07:24:20

場景數據

2021-10-13 18:01:33

快速排序場景

2021-09-10 06:50:03

TypeScript裝飾器應用

2021-10-08 09:59:32

冒泡排序場景

2021-10-09 10:25:41

排序應用場景

2021-09-08 07:49:34

TypeScript 泛型場景

2021-05-31 10:35:34

TCPWebSocket協議

2021-06-01 08:25:06

Node.jsJavaScript運行

2021-10-12 07:15:02

歸并排序場景

2021-10-11 09:38:41

開源
點贊
收藏

51CTO技術棧公眾號

亚洲国产精品字幕| 亚洲欧美日韩国产成人精品影院| 538国产精品视频一区二区| 中出视频在线观看| 户外露出一区二区三区| 中文字幕亚洲电影| 久久99精品久久久久久青青日本 | 成人综合国产精品| 国产大片中文字幕| 国产精品三级| 日韩一区二区三区电影在线观看 | 日本免费久久| 亚洲激情自拍偷拍| 欧美在线一二三区| 亚洲欧美激情在线观看| 米奇777在线欧美播放| 欧美成人四级hd版| 永久免费av无码网站性色av| 日韩激情欧美| 在线观看亚洲精品| 国产中文字幕二区| 黄色在线免费看| 成人午夜视频福利| 91免费视频网站| 免费观看日批视频| av不卡在线| 久久69精品久久久久久久电影好 | 国产xxxxhd| 亚洲伦乱视频| 欧美日韩一区二区在线| 99久久99久久精品| 免费在线午夜视频| 久久久国产精品麻豆| 成人免费视频视频在| 国产精品国产一区二区三区四区| 久久久999| 97国产精品视频| 久久精品免费在线| 亚洲精品一区二区在线看| 亚洲视频第一页| 久久久久国产精品区片区无码| 国产在线不卡一区二区三区| 欧美午夜精品久久久久久孕妇| 欧美日本视频在线观看| 里番在线播放| 亚洲国产一区二区三区青草影视| 亚洲欧美一二三| 麻豆电影在线播放| 国产精品久久久爽爽爽麻豆色哟哟 | 中文字幕黄色av| 久久久www| 日韩免费在线观看视频| 特级毛片www| 国产亚洲精品自拍| 欧美一区深夜视频| 毛片基地在线观看| 欧美亚洲一区| 日韩暖暖在线视频| 一级久久久久久| 日本人妖一区二区| 久久久久久成人精品| 久久久综合久久| 亚洲高清资源| 2020国产精品视频| 中文字幕69页| 美女国产一区二区| 91精品综合视频| 国产黄a三级三级三级| 国产91丝袜在线播放九色| 岛国视频一区| 全色精品综合影院| 国产欧美一区二区精品性色| 日韩精品最新在线观看| 欧美成年黄网站色视频| 亚洲精品乱码久久久久久黑人| 免费观看亚洲视频| 欧美激情网站| 精品视频1区2区3区| 奇米视频7777| 国内精品国产成人国产三级粉色| 国产手机视频精品| 黑人と日本人の交わりビデオ| 亚洲a一区二区三区| 久久久久久久久久久人体| 在线观看中文字幕视频| 男人操女人的视频在线观看欧美| 91美女片黄在线观| 殴美一级特黄aaaaaa| 久久精品日产第一区二区三区高清版 | 国产福利第一页| 99久久精品国产麻豆演员表| 亚洲二区自拍| 三级资源在线| 在线观看国产91| 自拍视频第一页| 视频精品在线观看| 欧美激情中文网| 无码人妻久久一区二区三区| 国产伦精品一区二区三区免费迷 | 色影院视频在线| 亚洲综合丁香婷婷六月香| www.com毛片| 精品国产一区二区三区2021| 亚洲欧美在线x视频| 国产精品 欧美激情| 亚洲专区一区| 99影视tv| 麻豆视频在线| 在线视频欧美区| 97精品人妻一区二区三区蜜桃| 日韩精品1区| 欧美性受xxxx白人性爽| www.色日本| 亚洲国产精品成人综合| 欧美深夜福利视频| 欧美高清一级片| 中文字幕日韩欧美在线| 久久免费激情视频| 国产成人av在线影院| 亚洲va久久久噜噜噜久久狠狠| av蜜臀在线| 欧美一级黄色录像| 成人午夜免费影院| 日本va欧美va精品发布| 久久精品国产99精品国产亚洲性色| av片在线观看永久免费| 欧美日韩日日夜夜| 国产又粗又猛又爽视频| 一本久道久久综合婷婷鲸鱼| 91免费版黄色| 国产在线二区| 欧美日韩亚洲高清一区二区| 波多野结衣一本| 一本一本久久| 国模一区二区三区私拍视频| 欧洲中文在线| 日韩一区二区在线观看视频| 精品国产大片大片大片| 日本aⅴ精品一区二区三区| 免费国产一区| 亚洲黄色网址| 亚洲奶大毛多的老太婆| 亚洲久久在线观看| 久久欧美一区二区| 日韩毛片在线免费看| 香蕉久久精品| 日韩美女福利视频| 丁香婷婷在线| 欧美日韩免费观看一区三区| 欧美色视频一区二区三区在线观看| 日本 国产 欧美色综合| 亚洲欧美日韩精品久久久 | 欧美三级视频在线观看| 一级黄色录像毛片| 免费成人性网站| 在线观看福利一区| 国产精品中文| 久久久久久亚洲精品不卡| 成人免费一级视频| 亚洲高清免费观看高清完整版在线观看| 26uuu国产| 99精品久久| 日本不卡一区| 欧洲美女精品免费观看视频| 久久久国产精品x99av| 国产av精国产传媒| 亚洲第一狼人社区| 国产熟妇久久777777| 日韩高清在线电影| 中文字幕在线中文字幕日亚韩一区 | 国产传媒第一页| 免费观看久久久4p| 91成人在线视频观看| ady日本映画久久精品一区二区| 久久久久亚洲精品成人网小说| 香蕉久久一区二区三区| 在线观看亚洲精品视频| 欧美做爰爽爽爽爽爽爽| 播五月开心婷婷综合| 午夜视频在线瓜伦| 亚洲女同另类| 欧美人与物videos另类| 另类一区二区| 午夜精品久久久久久久白皮肤| 精品无人乱码| 日韩一区二区电影| 欧美精品一二三四区| 国产精品不卡在线| 2一3sex性hd| 美女视频网站黄色亚洲| 免费人成在线观看视频播放| 啪啪亚洲精品| 99c视频在线| 91精品xxx在线观看| 欧美成人免费在线视频| 久青草国产在线| 日韩欧美中文一区二区| 无码视频一区二区三区| 亚洲国产精品影院| 国产成人免费观看网站| www.日韩精品| 欧美视频国产视频| 性伦欧美刺激片在线观看| 糖心vlog在线免费观看| 红桃视频在线观看一区二区| 动漫精品视频| 亚洲成人毛片| 日韩av手机在线看| gratisvideos另类灌满| 久久精品国产91精品亚洲| 亚洲日本中文字幕在线| 日韩女优电影在线观看| 91tv国产成人福利| 色综合久久综合网| 久久这里只有精品国产| 亚洲色图欧洲色图| 亚洲精品国产精品国自产网站| 成人av免费在线观看| 欧美xxxxxbbbbb| 麻豆精品一区二区综合av| 亚洲 高清 成人 动漫| 国产精品v日韩精品v欧美精品网站| 午夜午夜精品一区二区三区文| 日韩丝袜视频| 国产综合 伊人色| 亚洲日本视频在线| 91亚洲一区精品| 日本成人一区二区| 国产精品美女视频网站| 外国成人直播| 国产99视频在线观看| 色黄视频在线观看| 91国内精品久久| 末成年女av片一区二区下载| 欧美激情一级二级| 不卡av免费观看| 欧美日韩成人在线播放| 在线视频观看国产| 欧美成人精品三级在线观看| 麻豆传媒在线完整视频| www.欧美精品一二三区| 蜜桃视频网站在线观看| 精品国产拍在线观看| 男女啪啪在线观看| 久久久999国产| www视频在线看| 久久久国产精彩视频美女艺术照福利| 欧美精品电影| 成年无码av片在线| 天堂av中文在线| 久久免费观看视频| 日韩激情电影免费看| 欧美亚洲视频在线看网址| 中文在线а√在线8| 国产成人福利视频| 成人涩涩视频| 亚洲a成v人在线观看| 9国产精品午夜| 精品国产免费久久久久久尖叫 | 成人av资源站| 国产激情在线免费观看| 国产欧美一区二区精品秋霞影院| 中文字幕免费在线看线人动作大片 | 国产精品国产三级欧美二区| 国产人妖ts一区二区| 久久综合中文色婷婷| 精品国产aⅴ| 异国色恋浪漫潭| 伊人成年综合电影网| 欧美亚洲一二三区| 日韩国产精品91| 国产毛片久久久久久| 不卡的看片网站| 波多野结衣一二三四区| 一区二区三区中文字幕| 日韩 国产 在线| 欧洲国产伦久久久久久久| 国产精品一区二区av白丝下载 | 日韩avvvv在线播放| 999这里有精品| kk眼镜猥琐国模调教系列一区二区| 美女又爽又黄视频毛茸茸| 国产精品乱码人人做人人爱| 国产亚洲第一页| 欧美在线不卡视频| 亚洲乱熟女一区二区| 国产一区二区三区视频| 自拍亚洲图区| 77777少妇光屁股久久一区| 精品视频一区二区三区四区五区| 91在线看www| 免费电影一区二区三区| 国产精品久久久影院| 久久综合亚州| 999热精品视频| 久久蜜桃av一区二区天堂| 夫妻性生活毛片| 欧美性色19p| 亚洲欧美高清视频| 久久精品国产亚洲精品2020| 吉吉日韩欧美| 国产精品手机视频| 婷婷综合激情| 精品久久久噜噜噜噜久久图片| 国产不卡免费视频| 女人黄色一级片| 大荫蒂欧美视频另类xxxx| 国产成人三级一区二区在线观看一| 亚洲视频欧美视频| а√天堂中文在线资源8| 亚洲综合中文字幕在线| 欧美日韩精品一区二区视频| 中国丰满人妻videoshd| 国产91在线观看| 欧美做爰爽爽爽爽爽爽| 欧美日韩午夜在线| 国产三区四区在线观看| 97热精品视频官网| 一区二区三区自拍视频| 婷婷视频在线播放| 日本美女一区二区三区| 国产色视频一区二区三区qq号| 亚洲一级不卡视频| 精品国产九九九| 久久精品国产久精国产一老狼| 国产麻豆久久| 欧美一区二区高清在线观看| 国产精品久久久久久久久久妞妞| 亚洲av无码久久精品色欲| 亚洲三级小视频| 88av在线视频| 日韩一区二区av| 免费日韩成人| 天天综合色天天综合色hd| 三级一区在线视频先锋| av黄色免费网站| 欧美日韩另类在线| 五月婷婷六月激情| 91极品女神在线| 久久亚州av| 日本三级免费网站| 91免费在线播放| 一级片中文字幕| 亚洲精品小视频| 国模套图日韩精品一区二区| 欧美另类网站| 日韩av中文在线观看| 日本综合在线观看| 欧美日韩专区在线| 欧美成人性生活视频| 成人做爰www免费看视频网站| 五月激情久久久| 99热这里只有精品2| 伊人色综合久久天天人手人婷| 性做久久久久久久| 久久久久久国产| 亚洲视频分类| 日本xxxx黄色| 亚洲色图视频免费播放| 亚洲精品中文字幕成人片| 97福利一区二区| 国内精品视频在线观看 | 国产精品久久久久久久久久久久久久久久久 | 黄色小视频在线免费看| 亚洲电影成人av99爱色| 日日夜夜天天综合| 熟女熟妇伦久久影院毛片一区二区| 国产乱色国产精品免费视频| 国产五月天婷婷| 亚洲天堂精品在线| 伊人久久大香线蕉综合影院首页| 50度灰在线观看| 91蜜桃婷婷狠狠久久综合9色| 五月婷婷六月婷婷| 久久这里只有精品视频首页| 国产美女撒尿一区二区| www.xxx亚洲| 亚洲免费三区一区二区| 手机福利在线| 91久久国产精品| 99综合视频| 欧洲美女女同性互添| 亚洲精品二三区| 欧美日韩卡一| 精品少妇人欧美激情在线观看| 久久免费精品国产久精品久久久久| 一级全黄裸体免费视频| 97久久久久久| 久久在线免费| xxxxxx黄色| 欧美日韩免费观看一区三区| 国产盗摄——sm在线视频| 亚洲欧洲在线一区| 波多野结衣亚洲一区| 一区二区三区免费在线视频| 97在线视频观看| 欧美91大片| 91成人精品一区二区| 亚洲国产中文字幕在线观看| 日韩一级特黄|