亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

javascript設計模式 ? 工廠模式原理與應用實例分析

瀏覽:5日期:2023-11-05 08:02:05

本文實例講述了javascript設計模式 ? 工廠模式原理與應用。分享給大家供大家參考,具體如下:

介紹:前面我們介紹了簡單工廠模式,簡單工廠模式存在一個嚴重的問題:當需要擴展時必定要修改工廠類的源代碼。我們雖然在第二個demo中做了一些優化,但是我們需在使用時明確指定執行方法的名字,這無疑提高了使用成本。那如何實現增加新產品而不影響已有代碼?工廠模式應運而生。

定義:定義一個用于創建對象的接口,讓子類決定將哪一個類實例化。工廠模式讓一個類的實例化延遲到其子類。工廠模式又稱為工廠方法模式,又可稱為虛擬構造器模式或多態工廠模式。工廠模式是一種類創建型模式。

場景:還是基于簡單工廠模式的場景,我們試著用工廠模式解決彈窗類的問題。

示例:

var Dialog = function(){ this.show = function(){ console.log(this.name + ’ is show -> ’ + this.element); }}; Dialog.createNotice = function(){ var _dialog = new Dialog(); _dialog.element = ’<div>notice</div>’; _dialog.name = ’notice’; return _dialog;}; Dialog.createToast = function(){ var _dialog = new Dialog(); _dialog.element = ’<div>toast</div>’; _dialog.name = ’toast’; return _dialog;}; Dialog.createWarnin = function(){ var _dialog = new Dialog(); _dialog.element = ’<div>warnin</div>’; _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 -> <div>notice</div>toast.show(); //toast is show -> <div>toast</div>warnin.show(); //warnin is show -> <div>warnin</div>

對比簡單工廠模式,工廠模式解決了什么問題呢?

最主要的就是將簡單工廠模式的factory方法進行拆分

交由其子類也就是createToast方法實現

而將所有工廠入口拆成獨立工廠類,之前的簡單工廠模式在新增時需要修改工廠類,違反了開關原則

工廠模式保證新增時只做添加不做修改

項目足夠大時,你可以將Factory和Dialog的子類拆成文件進行管理

在寫工廠模式的這段時間,查了一些資料,發現每個人都有自己的理解

看到的一些工廠模式的demo更像是我們前面介紹簡單工廠模式,為什么呢?

我們的demo參考的是java的書籍,這里面包含了抽象類這個概念,在前端只能靠自己的理解去描述

所以我們盡力通過一些差別來具體的介紹每一種模式

這里面的例子可能不是特別嚴謹,我后面會慢慢優化,寫的詳細一些只有一個目的

當有一天有人問我簡單工廠模式和工廠模式的區別在哪,我希望我能給出一個我的理解

工廠模式總結:

優點:* 增加新產品時,無需修改已存在的代碼* 只暴露工廠類,對具體實現封裝在內部,使用時無需關注內部使用

缺點:* 新增時還是需要新增具體實現以及提供具體的工廠類,一定程度增加了系統復雜度,會帶來一些額外開銷* 每個工廠只生產一種產品,會導致存在大量的工廠類,大大增加了系統的維護成本和運行開銷

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 欧洲无线区一二区 | 免费看日日麻批免费视频播放 | 中文字幕久久久久 | 国产在线精品一区二区 | 国产精品手机视频一区二区 | 国产啪视频1000部免费视频 | 西瓜影音理论片 | 97se亚洲综合在线韩国专区福利 | 日本欧美久久久久免费播放网 | 精品一区二区三区在线成人 | 国产大片中文字幕在线观看 | 精品国产免费一区二区三区 | 国产精品爱久久久久久久 | 国产精品九九视频 | 狠狠色丁香久久综合婷婷 | 黑人巨大白妞出浆 | 丁香婷婷亚洲六月综合色 | 欧美成人精品第一区 | 国产福利视频一区二区微拍视频 | 日韩免费视频 | 免费a在线 | 视频二区精品中文字幕 | 青青草97国产精品免费观看 | 精品国产一级在线观看 | 免费看片在线 | 天天影视色香欲综合网网站麻豆 | 国产精品免费看 | 日本无卡无吗中文免费 | 久久久福利 | 国产一级片免费视频 | 亚洲国产福利精品一区二区 | 亚洲精品国产一区二区在线 | 一级视频黄色 | 国产一级做a爰片... | 久久久久在线视频 | 日韩性生活片 | 久久机热一这里只精品 | 蝌蚪久久窝 | 欧美日韩一区二区中文字幕视频 | 五月婷婷综合在线 | 黄色免费a级片 |