本篇文章給大家分享的是有關(guān)javascript中工廠(chǎng)模式的原理分析,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。
創(chuàng)新互聯(lián)成立與2013年,先為宣漢等服務(wù)建站,宣漢等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為宣漢企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
介紹:前面我們介紹了簡(jiǎn)單工廠(chǎng)模式,簡(jiǎn)單工廠(chǎng)模式存在一個(gè)嚴(yán)重的問(wèn)題:當(dāng)需要擴(kuò)展時(shí)必定要修改工廠(chǎng)類(lèi)的源代碼。我們雖然在第二個(gè)demo中做了一些優(yōu)化,但是我們需在使用時(shí)明確指定執(zhí)行方法的名字,這無(wú)疑提高了使用成本。那如何實(shí)現(xiàn)增加新產(chǎn)品而不影響已有代碼?工廠(chǎng)模式應(yīng)運(yùn)而生。
定義:定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類(lèi)決定將哪一個(gè)類(lèi)實(shí)例化。工廠(chǎng)模式讓一個(gè)類(lèi)的實(shí)例化延遲到其子類(lèi)。工廠(chǎng)模式又稱(chēng)為工廠(chǎng)方法模式,又可稱(chēng)為虛擬構(gòu)造器模式或多態(tài)工廠(chǎng)模式。工廠(chǎng)模式是一種類(lèi)創(chuàng)建型模式。
場(chǎng)景:還是基于簡(jiǎn)單工廠(chǎng)模式的場(chǎng)景,我們?cè)囍霉S(chǎng)模式解決彈窗類(lèi)的問(wèn)題。
示例:
var Dialog = function(){ this.show = function(){ console.log(this.name + ' is show -> ' + this.element); } }; Dialog.createNotice = function(){ var _dialog = new Dialog(); _dialog.element = 'notice'; _dialog.name = 'notice'; return _dialog; }; Dialog.createToast = function(){ var _dialog = new Dialog(); _dialog.element = 'toast'; _dialog.name = 'toast'; return _dialog; }; Dialog.createWarnin = function(){ var _dialog = new Dialog(); _dialog.element = 'warnin'; _dialog.name = 'warnin'; return _dialog; }; var Factory = {}; Factory.NoticeFactory = function(){ return Dialog.createNotice(); } Factory.ToastFactory = function(){ return Dialog.createToast(); } Factory.WarninFactory = function(){ return Dialog.createWarnin(); } var notice = Factory.NoticeFactory(); var toast = Factory.ToastFactory(); var warnin = Factory.WarninFactory(); notice.show(); //notice is show ->noticetoast.show(); //toast is show ->toastwarnin.show(); //warnin is show ->warnin
對(duì)比簡(jiǎn)單工廠(chǎng)模式,工廠(chǎng)模式解決了什么問(wèn)題呢?
最主要的就是將簡(jiǎn)單工廠(chǎng)模式的factory方法進(jìn)行拆分
交由其子類(lèi)也就是createToast方法實(shí)現(xiàn)
而將所有工廠(chǎng)入口拆成獨(dú)立工廠(chǎng)類(lèi),之前的簡(jiǎn)單工廠(chǎng)模式在新增時(shí)需要修改工廠(chǎng)類(lèi),違反了開(kāi)關(guān)原則
工廠(chǎng)模式保證新增時(shí)只做添加不做修改
項(xiàng)目足夠大時(shí),你可以將Factory和Dialog的子類(lèi)拆成文件進(jìn)行管理
在寫(xiě)工廠(chǎng)模式的這段時(shí)間,查了一些資料,發(fā)現(xiàn)每個(gè)人都有自己的理解
看到的一些工廠(chǎng)模式的demo更像是我們前面介紹簡(jiǎn)單工廠(chǎng)模式,為什么呢?
我們的demo參考的是java的書(shū)籍,這里面包含了抽象類(lèi)這個(gè)概念,在前端只能靠自己的理解去描述
所以我們盡力通過(guò)一些差別來(lái)具體的介紹每一種模式
這里面的例子可能不是特別嚴(yán)謹(jǐn),我后面會(huì)慢慢優(yōu)化,寫(xiě)的詳細(xì)一些只有一個(gè)目的
當(dāng)有一天有人問(wèn)我簡(jiǎn)單工廠(chǎng)模式和工廠(chǎng)模式的區(qū)別在哪,我希望我能給出一個(gè)我的理解
工廠(chǎng)模式總結(jié):
優(yōu)點(diǎn):
* 增加新產(chǎn)品時(shí),無(wú)需修改已存在的代碼
* 只暴露工廠(chǎng)類(lèi),對(duì)具體實(shí)現(xiàn)封裝在內(nèi)部,使用時(shí)無(wú)需關(guān)注內(nèi)部使用
缺點(diǎn):
* 新增時(shí)還是需要新增具體實(shí)現(xiàn)以及提供具體的工廠(chǎng)類(lèi),一定程度增加了系統(tǒng)復(fù)雜度,會(huì)帶來(lái)一些額外開(kāi)銷(xiāo)
* 每個(gè)工廠(chǎng)只生產(chǎn)一種產(chǎn)品,會(huì)導(dǎo)致存在大量的工廠(chǎng)類(lèi),大大增加了系統(tǒng)的維護(hù)成本和運(yùn)行開(kāi)銷(xiāo)
以上就是javascript中工廠(chǎng)模式的原理分析,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。