欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

JavaScript中怎么實(shí)現(xiàn)工廠模式

本篇文章為大家展示了JavaScript中怎么實(shí)現(xiàn)工廠模式,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

公司專注于為企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、商城開發(fā),小程序設(shè)計(jì),軟件按需網(wǎng)站設(shè)計(jì)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗(yàn),我們會(huì)仔細(xì)了解各客戶的需求而做出多方面的分析、設(shè)計(jì)、整合,為客戶設(shè)計(jì)出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,成都創(chuàng)新互聯(lián)更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。

什么是工廠模式?

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

如果只接觸過JavaScript這門語言的的人可能會(huì)對(duì)抽象這個(gè)詞的概念有點(diǎn)模糊,因?yàn)镴avaScript  一直將abstract作為保留字而沒有去實(shí)現(xiàn)它。如果不能很好的理解抽象的概念,那么就很難理解工廠模式中的三種方法的異同。

下面我們來看一下之前提到的工廠模式的三種實(shí)現(xiàn)方法: 簡單工廠模式、工廠方法模式、抽象工廠模式。

簡單工廠模式

簡單工廠模式又叫靜態(tài)工廠模式,由一個(gè)工廠對(duì)象決定創(chuàng)建某一種產(chǎn)品對(duì)象類的實(shí)例。主要用來創(chuàng)建同一類對(duì)象。

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

JavaScript中怎么實(shí)現(xiàn)工廠模式

UserFactory就是一個(gè)簡單工廠,在該函數(shù)中有3個(gè)構(gòu)造函數(shù)分別對(duì)應(yīng)不同的權(quán)限的用戶。當(dāng)我們調(diào)用工廠函數(shù)時(shí),只需要傳遞superAdmin,  admin, user這三個(gè)可選參數(shù)中的一個(gè)獲取對(duì)應(yīng)的實(shí)例對(duì)象。你也許發(fā)現(xiàn),我們的這三類用戶的構(gòu)造函數(shù)內(nèi)部很相識(shí),我們還可以對(duì)其進(jìn)行優(yōu)化。

JavaScript中怎么實(shí)現(xiàn)工廠模式

簡單工廠的優(yōu)點(diǎn)在于,你只需要一個(gè)正確的參數(shù),就可以獲取到你所需要的對(duì)象,而無需知道其創(chuàng)建的具體細(xì)節(jié)。但是在函數(shù)內(nèi)包含了所有對(duì)象的創(chuàng)建邏輯(構(gòu)造函數(shù))和判斷邏輯的代碼,每增加新的構(gòu)造函數(shù)還需要修改判斷邏輯代碼。當(dāng)我們的對(duì)象不是上面的3個(gè)而是30個(gè)或更多時(shí),這個(gè)函數(shù)會(huì)成為一個(gè)龐大的超級(jí)函數(shù),便得難以維護(hù)。所以,簡單工廠只能作用于創(chuàng)建的對(duì)象數(shù)量較少,對(duì)象的創(chuàng)建邏輯不復(fù)雜時(shí)使用。

工廠方法模式

工廠方法模式的本意是將實(shí)際創(chuàng)建對(duì)象的工作推遲到子類中,這樣核心類就變成了抽象類。但是在JavaScript中很難像傳統(tǒng)面向?qū)ο竽菢尤?shí)現(xiàn)創(chuàng)建抽象類。所以在JavaScript中我們只需要參考它的核心思想即可。我們可以將工廠方法看作是一個(gè)實(shí)例化對(duì)象的工廠類。

在簡單工廠模式中,我們每添加一個(gè)構(gòu)造函數(shù)需要修改兩處代碼?,F(xiàn)在我們使用工廠方法模式改造上面的代碼,剛才提到,工廠方法我們只把它看作是一個(gè)實(shí)例化對(duì)象的工廠,它只做實(shí)例化對(duì)象這一件事情!  我們采用安全模式創(chuàng)建對(duì)象。

JavaScript中怎么實(shí)現(xiàn)工廠模式

上面的這段代碼就很好的解決了每添加一個(gè)構(gòu)造函數(shù)就需要修改兩處代碼的問題,如果我們需要添加新的角色,只需要在UserFactory.prototype中添加。例如,我們需要添加一個(gè)VipUser:

JavaScript中怎么實(shí)現(xiàn)工廠模式

上面的這段代碼中,使用到的安全模式可能很難一次就能理解。

JavaScript中怎么實(shí)現(xiàn)工廠模式

因?yàn)槲覀儗uperAdmin、Admin、NormalUser等構(gòu)造函數(shù)保存到了UserFactory.prototype中,也就意味著我們必須實(shí)例化UserFactory函數(shù)才能夠進(jìn)行以上對(duì)象的實(shí)例化。如下面代碼所示

JavaScript中怎么實(shí)現(xiàn)工廠模式

在上面的調(diào)用函數(shù)的過程中, 一旦我們?cè)谌魏坞A段忘記使用new,  那么就無法正確獲取到superAdmin這個(gè)對(duì)象。但是一旦使用安全模式去進(jìn)行實(shí)例化,就能很好解決上面的問題。

抽象工廠模式

上面介紹了簡單工廠模式和工廠方法模式都是直接生成實(shí)例,但是抽象工廠模式不同,抽象工廠模式并不直接生成實(shí)例, 而是用于對(duì)產(chǎn)品類簇的創(chuàng)建。

上面例子中的superAdmin,admin,user三種用戶角色,其中user可能是使用不同的社交媒體賬戶進(jìn)行注冊(cè)的,例如:wechat,qq,weibo。那么這三類社交媒體賬戶就是對(duì)應(yīng)的類簇。在抽象工廠中,類簇一般用父類定義,并在父類中定義一些抽象方法,再通過抽象工廠讓子類繼承父類。所以,抽象工廠其實(shí)是實(shí)現(xiàn)子類繼承父類的方法。

上面提到的抽象方法是指聲明但不能使用的方法。在其他傳統(tǒng)面向?qū)ο蟮恼Z言中常用abstract進(jìn)行聲明,但是在JavaScript中,abstract是屬于保留字,但是我們可以通過在類的方法中拋出錯(cuò)誤來模擬抽象類。

JavaScript中怎么實(shí)現(xiàn)工廠模式

上述代碼中的getPrice就是抽象方法,我們定義它但是卻沒有去實(shí)現(xiàn)。如果子類繼承WechatUser但是并沒有去重寫getName,那么子類的實(shí)例化對(duì)象就會(huì)調(diào)用父類的getName方法并拋出錯(cuò)誤提示。

下面我們分別來實(shí)現(xiàn)賬號(hào)管理的抽象工廠方法:

JavaScript中怎么實(shí)現(xiàn)工廠模式

AccountAbstractFactory就是一個(gè)抽象工廠方法,該方法在參數(shù)中傳遞子類和父類,在方法體內(nèi)部實(shí)現(xiàn)了子類對(duì)父類的繼承。對(duì)抽象工廠方法添加抽象類的方法我們是通過點(diǎn)語法進(jìn)行添加的。

下面我們來定義普通用戶的子類:

JavaScript中怎么實(shí)現(xiàn)工廠模式

上述代碼我們分別定義了UserOfWechat,UserOfQq,UserOfWeibo三種類。這三個(gè)類作為子類通過抽象工廠方法實(shí)現(xiàn)繼承。特別需要注意的是,調(diào)用抽象工廠方法后不要忘記重寫抽象方法,否則在子類的實(shí)例中調(diào)用抽象方法會(huì)報(bào)錯(cuò)。

我們來分別對(duì)這三種類進(jìn)行實(shí)例化,檢測(cè)抽象工廠方法是實(shí)現(xiàn)了類簇的管理。

JavaScript中怎么實(shí)現(xiàn)工廠模式

從打印結(jié)果上看,AccountAbstractFactory這個(gè)抽象工廠很好的實(shí)現(xiàn)了它的作用,將不同用戶賬戶按照社交媒體這一個(gè)類簇進(jìn)行了分類。這就是抽象工廠的作用,它不直接創(chuàng)建實(shí)例,而是通過類的繼承進(jìn)行類簇的管理。抽象工廠模式一般用在多人協(xié)作的超大型項(xiàng)目中,并且嚴(yán)格的要求項(xiàng)目以面向?qū)ο蟮乃枷脒M(jìn)行完成。

ES6中的工廠模式

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

ES6重寫簡單工廠模式

使用ES6重寫簡單工廠模式時(shí),我們不再使用構(gòu)造函數(shù)創(chuàng)建對(duì)象,而是使用class的新語法,并使用static關(guān)鍵字將簡單工廠封裝到User類的靜態(tài)方法中:

JavaScript中怎么實(shí)現(xiàn)工廠模式

ES6重寫工廠方法模式

在上文中我們提到,工廠方法模式的本意是將實(shí)際創(chuàng)建對(duì)象的工作推遲到子類中,這樣核心類就變成了抽象類。但是JavaScript的abstract是一個(gè)保留字,并沒有提供抽象類,所以之前我們只是借鑒了工廠方法模式的核心思想。

雖然ES6也沒有實(shí)現(xiàn)abstract,但是我們可以使用new.target來模擬出抽象類。new.target指向直接被new執(zhí)行的構(gòu)造函數(shù),我們對(duì)new.target進(jìn)行判斷,如果指向了該類則拋出錯(cuò)誤來使得該類成為抽象類。下面我們來改造代碼。

JavaScript中怎么實(shí)現(xiàn)工廠模式

ES6重寫抽象工廠模式

抽象工廠模式并不直接生成實(shí)例,  而是用于對(duì)產(chǎn)品類簇的創(chuàng)建。我們同樣使用new.target語法來模擬抽象類,并通過繼承的方式創(chuàng)建出UserOfWechat, UserOfQq,  UserOfWeibo這一系列子類類簇。使用getAbstractUserFactor來返回指定的類簇。

JavaScript中怎么實(shí)現(xiàn)工廠模式

工廠模式的項(xiàng)目實(shí)戰(zhàn)應(yīng)用

在實(shí)際的前端業(yè)務(wù)中,最常用的簡單工廠模式。如果不是超大型的項(xiàng)目,是很難有機(jī)會(huì)使用到工廠方法模式和抽象工廠方法模式的。下面我介紹在Vue項(xiàng)目中實(shí)際使用到的簡單工廠模式的應(yīng)用。

在普通的vue +  vue-router的項(xiàng)目中,我們通常將所有的路由寫入到router/index.js這個(gè)文件中。下面的代碼我相信vue的開發(fā)者會(huì)非常熟悉,總共有5個(gè)頁面的路由:

JavaScript中怎么實(shí)現(xiàn)工廠模式

當(dāng)涉及權(quán)限管理頁面的時(shí)候,通常需要在用戶登陸根據(jù)權(quán)限開放固定的訪問頁面并進(jìn)行相應(yīng)權(quán)限的頁面跳轉(zhuǎn)。但是如果我們還是按照老辦法將所有的路由寫入到router/index.js這個(gè)文件中,那么低權(quán)限的用戶如果知道高權(quán)限路由時(shí),可以通過在瀏覽器上輸入url跳轉(zhuǎn)到高權(quán)限的頁面。所以我們必須在登陸的時(shí)候根據(jù)權(quán)限使用vue-router提供的addRoutes方法給予用戶相對(duì)應(yīng)的路由權(quán)限。這個(gè)時(shí)候就可以使用簡單工廠方法來改造上面的代碼。

在router/index.js文件中,我們只提供/login這一個(gè)路由頁面。

JavaScript中怎么實(shí)現(xiàn)工廠模式

我們?cè)趓outer/文件夾下新建一個(gè)routerFactory.js文件,導(dǎo)出routerFactory簡單工廠函數(shù),用于根據(jù)用戶權(quán)限提供路由權(quán)限,代碼如下

JavaScript中怎么實(shí)現(xiàn)工廠模式

在登陸頁導(dǎo)入該方法,請(qǐng)求登陸接口后根據(jù)權(quán)限添加路由:

JavaScript中怎么實(shí)現(xiàn)工廠模式

在實(shí)際項(xiàng)目中,因?yàn)槭褂胻his.$router.addRoutes方法添加的路由刷新后不能保存,所以會(huì)導(dǎo)致路由無法訪問。通常的做法是本地加密保存用戶信息,在刷新后獲取本地權(quán)限并解密,根據(jù)權(quán)限重新添加路由。這里因?yàn)楹凸S模式?jīng)]有太大的關(guān)系就不再贅述。

上述內(nèi)容就是JavaScript中怎么實(shí)現(xiàn)工廠模式,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站標(biāo)題:JavaScript中怎么實(shí)現(xiàn)工廠模式
文章URL:http://aaarwkj.com/article42/pdehec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)站設(shè)計(jì)、域名注冊(cè)網(wǎng)站排名、用戶體驗(yàn)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)
18禁视频免费无遮挡| 亚洲国产精品一区二区三区在线| 精品一二三区在线天堂| 欧美精品三级不卡在线| 久久久久久精品国产av| 国产精品免费观看在线国产| 欧美亚洲另类色自拍偷拍| 国产有码视频一区二区三区| 亚洲午夜福利天堂社区| av天堂在线观看网站| 欧美香蕉视频一区二区| 国产一区 亚洲精品| 欧洲一区二区在线激情| 国产精品日本一区二区| 久久亚洲综合精品少妇| 中文字幕日韩精品在线看| 久久亚洲女同第一区综合| 国产三级精品电影久久| 国产精品一区二区三区四区久久 | 黄色亚洲日本欧美在线观看| 日韩欧美二区三区精品在线| 日韩一区二区电影在线| 中文日韩av在线免费播放| 精品综合亚洲中文字幕| 欧美日韩国内在线视频| 白白色发布青青在线视频观看| 日韩成人免费观看视频| 日本午夜一区二区在线观看| 十八禁在线观看网址免费| 亚洲精品伦理中文字幕| 亚洲永久免费黄色av| 免费黄色一区二区三区| 日本人的黄色录像视频| 欧美一级特黄大片做受另类| 欧美亚洲综合日韩精品区| 国产精品一区二区久久蜜桃麻豆| 亚洲天堂日韩欧美在线| 亚洲国产自拍偷拍视频| 一本久道久久综合久久鬼色| 亚洲av成人av天堂| 黄色日韩大片在线观看|