日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:31日期:2023-11-05 09:05:40

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

介紹:簡單工廠模式是最常用的一類創建型設計模式。其中簡單工廠模式并不屬于GoF23個經典設計模式,它通常被作為學習其他工廠模式的基礎。

定義:定義一個工廠類,它可以根據參數的不同返回不同的實例,被創建的實例通常都具有相同的父類,因為在簡單工廠模式中創建實例的方法是靜態方法,因此簡單工廠模式又被稱為靜態工廠方法模式,它屬于類創建型模式。

場景:我們需要寫一個dialog工具類,在項目初期我們只需要考慮一個簡單的彈窗實現,項目持續迭代,會衍生出各種類型的彈窗,帶關閉按鈕的,帶確認按鈕的…..

我見到最多的做法是根據一個type值來判斷當前需要彈什么類型的窗口,這樣的設計我之前沒覺得有問題,但是看了前面介紹的設計原則,我們也來分析下這么做的缺點:

1. 存在多個if…else…代碼塊,代碼冗長,閱讀困難,維護困難,測試困難,影響系統性能。2. dialog類職責過重,負責初始化所有彈窗實例,違反了單一職責原則,不利于重用和維護。3. 當需要新增彈窗類型是,必須修改源代碼,違反了開關原則。4. 不同種類彈窗基礎樣式相同,會導致存在大量重復代碼。5. 各類彈窗的創建和使用都是在各個業務邏輯中,如果我想修改創建方式必須修改所有業務代碼,違反了開關原則

示例:

var Dialog = (function(){ var createNotice = function(){ return ’<div>notice</div>’; } var createToast = function(){ return ’<div>toast</div>’; } var createWarnin = function(){ return ’<div>warnin</div>’; } var Dialog = function(){ this.element = ’’; this.name = ’’; this.show = function(){ console.log(this.name + ’ is show -> ’ + this.element); }; } return { factory: function(arg){ var _dialog; if(arg === ’notice’){ _dialog = new Dialog(); _dialog.element = createNotice(); _dialog.name = ’notice’; }else if(arg === ’toast’){ _dialog = new Dialog(); _dialog.element = createToast(); _dialog.name = ’toast’; }else if(arg === ’warnin’){ _dialog = new Dialog(); _dialog.element = createWarnin(); _dialog.name = ’warnin’; } return _dialog; } }})(); var notice = Dialog.factory(’notice’);var toast = Dialog.factory(’toast’);var warnin = Dialog.factory(’warnin’);toast.show(); //toast is show -> <div>toast</div>notice.show(); //notice is show -> <div>notice</div>warnin.show(); //warnin is show -> <div>warnin</div>

以上的解決方案是自己理解著寫的,對照著java的示例寫了一個,實現的方式有很多種,你可以用原型鏈,用繼承來實現都可以。我們這里主要討論下為什么要這么寫。

之前我們列出了5個缺點:我們主要解決了2,4和5,將共有的方法屬性抽取出來寫在父類上,減少了重復代碼,將每種情況特有的代碼抽取出來,解決了不符合單一職責原則的問題。

重要的是將所有彈窗的創建集中在工廠類中,當有修改時,只需要修改工廠類即可,不會影響業務代碼。

這里我們思考一下:1.如何去掉那些if…else…? 2.當我要新增一個error類型的彈窗時如何滿足開關原則?

我自己試了一下:

var Dialog = function(){ this.element = ’’; this.name = ’’; this.show = function(){ console.log(this.name + ’ is show -> ’ + this.element); };} Dialog.createNotice = function(){ return ’<div>notice</div>’; };Dialog.createToast = function(){ return ’<div>toast</div>’; };Dialog.createWarnin = function(){ return ’<div>warnin</div>’; };Dialog.factory = function(arg){ var _dialog = new Dialog(); _dialog.element = Dialog[arg](); _dialog.name = arg; return _dialog;}; var notice = Dialog.factory(’createNotice’);var toast = Dialog.factory(’createToast’);var warnin = Dialog.factory(’createWarnin’);notice.show(); //createNotice is show -> <div>notice</div>warnin.show(); //createWarnin is show -> <div>warnin</div>toast.show(); //createToast is show -> <div>toast</div>

這樣當我做新增時,只需要要新增一條配置即可,不用去對公告內容做修改。滿足了開關原則的對擴展支持對修改關閉。

簡單工廠模式總結:

優點:* 簡單工廠模式實現了對象創建和使用的分離

缺點:* 工廠模式集中了所有產品的創建邏輯,職責過重,一旦出現問題會影響到整個系統

適用場景:* 適用于創建的對象比較少,由于創建的對象較少,不會造成工廠方法中的業務邏輯太過復雜* 客戶端只知道傳入工廠類的參數,對于如何創建對象并不關心

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

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

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

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲九九精品| 国产一区二区三区久久| 激情亚洲影院在线观看| 免费高潮视频95在线观看网站| 99视频精品视频高清免费| 夜夜嗨av一区二区三区网站四季av| 亚洲一区二区毛片| 日韩av成人高清| 黄色网一区二区| 欧美日韩在线网站| 日韩中出av| 国产高潮在线| 久久亚洲风情| 欧美国产视频| 99tv成人| 日韩1区2区3区| 中文字幕在线免费观看视频| 欧美女激情福利| 久久国产尿小便嘘嘘| 日韩精品欧美| 欧美亚洲免费| 秋霞国产精品| 欧美永久精品| 欧美a级片一区| 国产乱论精品| 91久久国产| 国产精品一区二区三区四区在线观看| 伊人久久高清| 日本强好片久久久久久aaa| 日本少妇一区| 国产精品资源| 亚洲激精日韩激精欧美精品| 国产精品中文| 不卡av一区二区| 国产精品.xx视频.xxtv| 99亚洲视频| 精品国产成人| 亚洲精品日本| 婷婷激情久久| 久久超碰99| 亚洲欧美日韩国产综合精品二区 | av在线最新| 免费一区二区视频| 国产videos久久| 日韩区欧美区| 免费观看不卡av| 久久69成人| 日韩精品久久久久久久软件91| 久久精品中文| 麻豆一区二区三区| 亚洲欧洲专区| 欧美日韩激情| 免费看av不卡| 国产精品日韩精品中文字幕| 麻豆精品网站| 久久久9色精品国产一区二区三区| 国产日韩中文在线中文字幕| 久久亚洲图片| 新版的欧美在线视频| 欧美日韩黄网站| 99国产精品自拍| 999久久久91| 日韩欧美精品一区| 国产精品mm| 久久精品 人人爱| 三级欧美韩日大片在线看| 久久精品1区| 日韩伦理一区| 成人午夜网址| 国产高清亚洲| 91亚洲无吗| 亚洲v天堂v手机在线| 国产日韩综合| 亚洲二区精品| 久久三级视频| 久久裸体视频| 最近高清中文在线字幕在线观看1| 免费精品一区| 国产精品分类| 国产精品一区亚洲| 国产日产精品_国产精品毛片 | 亚洲一区二区三区高清不卡| 欧美 日韩 国产一区二区在线视频| 精品国产91| 久久精品亚洲一区二区| 国产高清日韩| 精品一区电影| 欧美成人精品一级| 国产精品jk白丝蜜臀av小说| 国产精品日本一区二区不卡视频| 日本va欧美va欧美va精品| 午夜电影一区| 日韩不卡在线观看日韩不卡视频 | 国产精品久久久一区二区| 欧美亚洲专区| 日本亚洲最大的色成网站www | 国产精品美女午夜爽爽| 国产欧美日韩影院| 麻豆精品视频在线观看免费| 麻豆国产精品一区二区三区| 美女性感视频久久| 久久中文字幕一区二区三区| 国产精品mm| 国内精品亚洲| www.com.cn成人| 久久精品影视| 亚洲视频www| 亚久久调教视频| 欧美日韩99| 免费在线成人| 日韩黄色大片| 国产高清一区| 亚洲影视一区| 欧美一区激情| 国产66精品| 欧美色图一区| 视频一区二区三区中文字幕| 亚洲91在线| 国产精品久久国产愉拍| 国产美女高潮在线| 九一成人免费视频| 在线观看亚洲精品福利片| 亚欧洲精品视频在线观看| 国产欧美大片| 97精品97| 99国产精品视频免费观看一公开 | 欧美日韩国产综合网| 丝袜美腿亚洲色图| 欧美在线日韩| 快播电影网址老女人久久| 国产色综合网| 国产欧美高清视频在线| 中文字幕色婷婷在线视频| 国产精品7m凸凹视频分类| 亚洲精品婷婷| 成人午夜在线| 一区二区亚洲精品| 日韩高清不卡在线| 日韩欧美一区二区三区免费看| 午夜欧美精品久久久久久久| 色狠狠一区二区三区| 九九九精品视频| 亚洲福利免费| 日本在线成人| 97人人精品| 久久福利一区| 久久中文字幕一区二区| 不卡视频在线| 久久精品999| 伊人久久高清| 日韩极品在线观看| 日本久久黄色| 亚洲制服少妇| 麻豆国产精品777777在线| 激情91久久| 老司机免费视频一区二区| 在线综合视频| 欧美黑人巨大videos精品| 国产精品色在线网站| 精品久久网站| 婷婷综合亚洲| 日韩三级精品| zzzwww在线看片免费| 99精品99| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 美女视频黄 久久| 最新国产拍偷乱拍精品| 国产精品欧美日韩一区| 欧美日韩免费观看一区=区三区| 日韩在线网址| 精品久久久久中文字幕小说| 一区二区亚洲精品| 国产欧美日韩一级| 99精品美女| 日本a口亚洲| 亚洲精品在线a| 91精品国产自产在线丝袜啪| 尤物tv在线精品| 国产精品mv在线观看| 免费不卡在线观看| 欧美日韩精品免费观看视欧美高清免费大片| 奇米狠狠一区二区三区| av一区二区高清| 给我免费播放日韩视频| 日韩在线成人| 日韩午夜免费| 欧美日韩国产观看视频| 久久国产婷婷国产香蕉| 中文一区二区| 日韩精品永久网址| 国产精品多人| 日本麻豆一区二区三区视频| 99视频在线精品国自产拍免费观看| 久久精品国产网站| 日韩欧美精品一区二区综合视频| 国产综合精品一区| 韩国久久久久久| 久久精品国产网站| 国产乱人伦丫前精品视频| 亚洲精品第一|