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

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

JS 設計模式之:工廠模式定義與實現方法淺析

瀏覽:177日期:2024-05-09 17:05:54

本文實例講述了JS 設計模式之:工廠模式定義與實現方法。分享給大家供大家參考,具體如下:

前言

上次我們介紹了單例模式,沒看過的小伙伴可以看這個鏈接:

淺析 JS 設計模式之:單例模式

今天來說一說一種常見的設計模式:工廠模式。

工廠模式是一種創建對象的 創建型模式,遵循 DRY(Don’t Repeat Yourself)原則。在該模式下,代碼將會根據具體的輸入或其他既定規則,自行決定創建哪種類型的對象。簡單點兒說就是,動態返回需要的實例對象

回顧上次的例子

讓我們繼續使用單例模式中的例子,一個日志工具 Logger :

class Logger { log (...args) { console.log(...args); }}

上面是最核心的 api,每次使用都需要使用 new Logger() 來創建一個 logger 對象,然后使用方法就和 console 一樣啦~

多種 Logger

假如我們現在的代碼要支持 electron 環境,即日志既可以是 console 日志,也可以是 file 日志,那么我們就需要有兩種類型的 logger:

ConsoleLogger

// logger/console.jsclass ConsoleLogger { log (...args) { console.log(...args) }}export default ConsoleLoggerFileLogger

// logger/file.jsclass FileLogger { log (...args) { dumpLog(...args) }}export default FileLogger

這里先不用管 dumpLog 的具體實現,只用知道它就是將日志寫在文件中的即可~

使用工廠

我們已經有了兩種類型的 logger,但是這兩種 logger 的 api 實際上都是一樣的,在項目中直接導入當然也可以使用,只不過每次都要導入對應類型的模塊,然后再使用,像下面這樣:

使用 console logger

import ConsoleLogger from ’./logger/console’const logger = new ConsoleLogger()

使用 file logger

import FileLogger from ’./logger/file’const logger = new FileLogger()

是不是很繁瑣?如果還有其他 logger 類型,如遠程日志,就會出現更多種使用方式了。為了把 logger 模塊的使用方式統一,這時候就會用到工廠模式啦~

讓我們新建一個 index.js:

// logger/index.jsimport ConsoleLogger from ’./console.js’import FileLogger from ’./file.js’function createLogger(type = ’console’) { if (type === ’console’) { return new ConsoleLogger() } else if (type === ’file’) { return new FileLogger() } throw new Error(`Logger type not found: ${type}`)}export default createLogger

好了,這下我們的使用方式就會變成這樣:

import createLogger from ’./logger’// console loggerconst logger1 = createLogger(’console’)// file loggerconst logger2 = createLogger(’file’)重構一下

上面的 if else 不是很優雅?如果有更多中 logger 類型添加起來很麻煩?那我們可以使用對象來映射一下,從而拋棄 if else,同時添加一個 logger 選項。

// logger/index.jsimport ConsoleLogger from ’./console.js’import FileLogger from ’./file.js’const loggerMap = { console: ConsoleLogger, file: FileLogger}// 可選參數一般放在最后面function createLogger(options, type = ’console’) { const Logger = loggerMap[type] if (Logger) { return new Logger(options) } throw new Error(`Logger type not found: ${type}`)}上面這種封裝的方式,其實也符合 SOLID 原則中的 開閉原則,即 對擴展開放,對修改關閉,每當我們添加一種 logger 類型時,只需要新增一個文件,然后將構造器注冊進 loggerMap 中即可。而外面的使用方式都是不變的,這樣就用最少的修改完成了功能的新增,是不是很棒呀~總結

下面我們來回顧一下工廠模式的優點:

動態創建對象:可以用于需要在 運行時 確定對象類型的情況。 抽象:封裝了對象創建的細節,用戶不會接觸到對象的構造器,只需要告訴工廠需要哪種對象。 可用性 / 可維護性:將相似的對象用一個工廠管理,提供統一的創建接口,滿足 開閉原則,使我們可以輕松添加多種類型的對象,而無需修改大量代碼。

好啦~!工廠模式就介紹到這里啦~ 下次我們講一講裝飾器模式~

參考內容 JavaScript Object Oriented Patterns: Factory Pattern 《JavaScript 設計模式》 《JavaScript 面向對象編程指南》

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

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

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

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久av一区二区三区| 欧美激情三区| 欧美亚洲激情| 欧美日韩精品免费观看视欧美高清免费大片 | 欧美成a人国产精品高清乱码在线观看片在线观看久 | 亚洲视频综合| 久久精品官网| 91九色精品国产一区二区| 国产综合亚洲精品一区二| 欧美性感美女一区二区 | 在线一区欧美| 老鸭窝亚洲一区二区三区| 夜久久久久久| 尹人成人综合网| 蜜臀精品久久久久久蜜臀| 一区二区三区四区日韩| 亚洲理论在线| 欧美一区久久| 国产精品.xx视频.xxtv| 成人在线视频免费看| 久草免费在线视频| 久久久国产精品一区二区中文| 999久久久91| 美日韩精品视频| 日本免费在线视频不卡一不卡二| 国产乱人伦精品一区| 精品国产乱码久久久久久樱花| 国产suv精品一区二区四区视频| 蜜桃av在线播放| 尹人成人综合网| 青青国产精品| 黄色在线网站噜噜噜| 亚洲不卡av不卡一区二区| 波多野结衣一区| 亚洲丝袜美腿一区| 国产精品久久久免费| 日韩啪啪电影网| 99国产精品视频免费观看一公开| 日本亚洲最大的色成网站www | av亚洲在线观看| 亚洲精品欧洲| 欧美交a欧美精品喷水| 国产美女高潮在线| 亚洲少妇一区| 国产毛片一区二区三区 | 精品淫伦v久久水蜜桃| 日韩精品看片| 一区二区国产在线观看| 欧美精品aa| 一级欧洲+日本+国产| 日韩二区在线观看| 高清不卡亚洲| 综合激情视频| 国产精品极品国产中出| 性欧美videohd高精| 美女国产精品| 国产91在线精品| 日韩在线一二三区| 久久亚洲精品中文字幕| 亚洲激情av| 国产精品亚洲欧美日韩一区在线| 久久免费黄色| 日韩手机在线| av一区在线| 日本精品国产| 丝袜av一区| 国产精品一二| 亚洲精品午夜av福利久久蜜桃| 日韩三级久久| www.com.cn成人| 亚洲综合图色| 丝袜美腿诱惑一区二区三区| 亚洲精品日韩久久| 久久国产直播| 麻豆一区二区99久久久久| 午夜亚洲一区| 麻豆成全视频免费观看在线看| se01亚洲视频| 欧美91在线| 亚洲一区欧美激情| 成人午夜亚洲| 日韩高清国产一区在线| 99久久亚洲精品蜜臀| 日韩成人精品一区二区三区| 免费观看不卡av| 国产精品精品| 国产私拍福利精品视频二区| 欧美va天堂在线| 国模精品一区| 欧美日一区二区在线观看| 日韩一级网站| 国产中文在线播放| 国产麻豆精品久久| 亚洲精品一级| 丝袜美腿高跟呻吟高潮一区| 另类中文字幕国产精品| 国精品产品一区| 久久国产精品免费精品3p| 欧美日韩国产一区精品一区| yellow在线观看网址| 久久99精品久久久野外观看| 精品视频一区二区三区四区五区| 免费在线观看日韩欧美| 久久国产小视频| 在线精品小视频| 日韩午夜免费| 欧美日韩精品一区二区视频| 中文字幕人成乱码在线观看| 国产视频一区二| 综合色就爱涩涩涩综合婷婷| 欧美~级网站不卡| 欧美日韩精品免费观看视完整| 欧美激情视频一区二区三区免费 | 国产精品magnet| 日韩激情精品| 亚洲一区有码| 亚洲精品影视| 午夜性色一区二区三区免费视频| av不卡在线| 中文日韩在线| 蜜臀va亚洲va欧美va天堂| 男人操女人的视频在线观看欧美| 一区福利视频| 视频精品一区二区| 亚洲va久久| 丰满少妇一区| 久久中文字幕导航| 欧美日韩亚洲三区| 欧美日韩一区自拍| 日韩欧美中文在线观看| 中文一区二区| 亚洲一区二区av| 亚洲综合小说| 日韩精品免费观看视频| 日韩一区二区三区在线看| 日韩精品一区二区三区中文在线| 蜜桃一区二区三区在线观看| 在线国产日韩| 久久国内精品| 久久精品三级| 国产精品精品| 亚洲福利免费| 久久xxxx| 欧美亚洲网站| 卡一精品卡二卡三网站乱码| 成人国产精品久久| 亚洲高清二区| 蜜桃av一区| 国产精品密蕾丝视频下载| 精品久久久久中文字幕小说| 久久三级福利| 六月丁香综合| 国产日韩欧美一区二区三区 | 亚洲黄色免费看| 欧美日韩高清| 老司机精品久久| 国产日韩一区二区三区在线播放| 麻豆久久久久久久| 九九精品调教| 日韩在线播放一区二区| 日韩va欧美va亚洲va久久| 精品国产一区二区三区2021| 欧美三级精品| 中文不卡在线| 精品国产一区二| 亚洲精品一区二区在线看| 亚洲人成毛片在线播放女女| 国产日产高清欧美一区二区三区| 98精品久久久久久久| 99精品在线免费在线观看| 亚洲精品1区| 奇米亚洲欧美| 电影天堂国产精品| 综合欧美亚洲| 国产成人精品一区二区三区免费| 欧美a级一区| 欧美日韩va| 日韩一区二区三区在线免费观看| 亚洲综合丁香| 免费观看亚洲天堂| 亚洲激情中文| 国产精品丝袜在线播放| 国产理论在线| 亚洲69av| 色偷偷色偷偷色偷偷在线视频| 亚洲精品动态| 亚洲91久久| 国产欧美日韩精品高清二区综合区 | 三级欧美在线一区| 嫩呦国产一区二区三区av| 好看的亚洲午夜视频在线| 国产美女亚洲精品7777| 91精品精品| 国产欧美日韩在线一区二区| 久久久久午夜电影| 免费在线欧美黄色| 石原莉奈在线亚洲二区| 91视频久久| 日本欧美韩国一区三区| 亚洲h色精品|