国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

JS 設計模式之:工廠模式定義與實現(xiàn)方法淺析

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

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

前言

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

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

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

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

回顧上次的例子

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

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

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

多種 Logger

假如我們現(xiàn)在的代碼要支持 electron 環(huán)境,即日志既可以是 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 的具體實現(xiàn),只用知道它就是將日志寫在文件中的即可~

使用工廠

我們已經有了兩種類型的 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 類型,如遠程日志,就會出現(xiàn)更多種使用方式了。為了把 logger 模塊的使用方式統(tǒng)一,這時候就會用到工廠模式啦~

讓我們新建一個 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 不是很優(yōu)雅?如果有更多中 logger 類型添加起來很麻煩?那我們可以使用對象來映射一下,從而拋棄 if else,同時添加一個 logger 選項。

// logger/index.jsimport ConsoleLogger from ’./console.js’import FileLogger from ’./file.js’const loggerMap = { console: ConsoleLogger, file: FileLogger}// 可選參數(shù)一般放在最后面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 中即可。而外面的使用方式都是不變的,這樣就用最少的修改完成了功能的新增,是不是很棒呀~總結

下面我們來回顧一下工廠模式的優(yōu)點:

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

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

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

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

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

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

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 97超级碰碰碰久久久观看 | 国产精品视频自拍 | 日韩国产精品欧美一区二区 | 亚洲国产精品日韩在线观看 | 香港三澳门三日本三级 | 亚洲视频一区在线 | 日韩欧美一级毛片在线 | 韩国福利影视一区二区三区 | 在线视频日本 | 中文欧美一级强 | 美女黄色在线看 | 一级毛片一级毛片a毛片欧美 | 农村寡妇一级毛片免费播放 | 国产精品自在线天天看片 | 91久久视频| 欧美孕妇性xxxⅹ精品hd | 国产成人免费手机在线观看视频 | 国产91亚洲精品 | 国产91丝袜在线播放九色 | 国产精品线在线精品国语 | 国产成人在线网址 | 欧美一级视 | 怡红院亚洲红怡院天堂麻豆 | 一级女性黄 色生活片 | 免费在线观看亚洲 | 成年男女免费视频网站播放 | 成人免费毛片一区二区三区 | 国产亚洲一区二区三区在线 | 亚洲加勒比久久88色综合一区 | 天堂在线亚洲 | 欧美视频一区在线观看 | 欧美区一区 | 一区二区三区免费视频播放器 | 国产欧美17694免费观看视频 | 国产一区二区三区免费 | 亚洲美女高清aⅴ视频免费 亚洲美女黄色片 | 久久99爰这里有精品国产 | 久爱www免费人成福利播放 | 国产女乱淫真高清免费视频 | 成人性色生活影片 | 欧美一级毛片在线 |