NodeJS設(shè)計(jì)模式總結(jié)【單例模式,適配器模式,裝飾模式,觀察者模式】
本文實(shí)例講述了NodeJS設(shè)計(jì)模式。分享給大家供大家參考,具體如下:
1 . 單例模式
顧名思義,單例就是保證一個(gè)類只有一個(gè)實(shí)例,實(shí)現(xiàn)的方法是,先判斷實(shí)例是否存在,如果存在則直接返回,若不存在,則創(chuàng)建實(shí)例對(duì)象,并將實(shí)例對(duì)象保存在靜態(tài)變量中,當(dāng)下次請(qǐng)求時(shí),則可以直接返回這個(gè)對(duì)象實(shí)例,這就確保了一個(gè)類只有一個(gè)實(shí)例對(duì)象。舉個(gè)例子吧~一間學(xué)校剛剛起建還沒有圖書館,有的同學(xué)就向領(lǐng)導(dǎo)提意見:"hey! 哥們,能不能幫我們建一個(gè)圖書館? "(想要一個(gè)圖書館實(shí)例),然后領(lǐng)導(dǎo)說:"no problem??!等我一下,馬上建給你"(實(shí)例還沒有建立,便創(chuàng)建一個(gè))。幾個(gè)月后,圖書館建好了~有位奇葩同學(xué)也想去圖書館,他卻向領(lǐng)導(dǎo)提出要求: "hey! 哥們,我想去圖書館,能不能幫我建一個(gè)?"然后領(lǐng)導(dǎo)說: "no problem個(gè)頭阿!那邊已經(jīng)建好了一個(gè),你去那間不就可以了嗎!"(當(dāng)實(shí)例已經(jīng)存在的時(shí)候,則直接返回已經(jīng)創(chuàng)建的實(shí)例)
/*singleInstance.js*/ var _instance = null;//定義初始化_instance module.exports = function(time){ function Car(time){ this.time = time; } this.getInstance = function(){ if(_instance != null){ return _instance; }else{ return new Car(time); } } }
2. 適配器模式
若將一個(gè)類的接口轉(zhuǎn)換為客戶希望的另外一個(gè)接口,適配器模式可以使原本由于接口不兼容而不能一起工作的那些類可以一起工作。舉個(gè)例子吧~小明的老爸大明很愛喝白酒,但是呢喝酒又傷身,小明看到便不忍心,于是他想了方法:把白酒瓶子里面的酒倒掉,換成了白開水(重寫內(nèi)容)。大明看到還是那個(gè)酒瓶就沒太在意(接口沒有改變,只是內(nèi)容改變了),一口氣就把"酒"喝完了,還很高興~(此處假設(shè)大明智商比較低..)。因此支配器是一個(gè)既不得罪他人,也能達(dá)到自己目的的一個(gè)好方法~下面是具體的實(shí)現(xiàn)方法
/*target.js*/ module.exports = function(){ this.request = function(){//原接口 console.log('Target::request'); } }
/*adapter.js*/ var util = require('util'); var Target = require('./target.js'); var Adaptee = require('./adaptee.js'); function Adapter(){ Target.call(this); this.request = function(){//重寫原接口 var adapteeObj = new Adaptee();//重寫的內(nèi)容 adapteeObj.specialRequest(); } } util.inherits(Adapter, Target);//通過繼承原模塊, 獲得原接口 module.exports = Adapter;
3. 裝飾模式
裝飾模式可以通過繼承的方式,為一個(gè)基類對(duì)象擴(kuò)展功能。舉個(gè)例子吧~一顆圣誕樹,一開始什么都沒有。然后Amy看到之后往樹上掛了幾個(gè)飾品(擴(kuò)展原來的基類),然后Billy路過之后,覺得它還差點(diǎn)什么,就把圣誕樹拿過來(繼承),然后也往上面放點(diǎn)其他飾品(繼續(xù)擴(kuò)展)。
/*Base.js*/ module.exports = function(){ this.dosomething = function(){ console.log("Nice to meet u."); } }
/*Decorator.js*/ var util = require("util); var Base = require('./Base'); function Decorator(){ Base.call(this); this.dosomething = function(){ Base.dosomething(); console.log('I am a decorator');//拓展內(nèi)容 } } util.inherits(Decorator, Base);//繼承 module.exports = Decorator;
4. 觀察者模式
什么是觀察者模式呢?舉個(gè)例子吧~小狗同學(xué)和小熊同學(xué)同時(shí)喜歡上了班里可愛的小兔同學(xué)。小狗和小熊都會(huì)注意著小兔的一舉一動(dòng),只有小兔有什么動(dòng)靜他們兩個(gè)都會(huì)知道~相對(duì)而言呢,小狗和小熊就是小兔的"觀察者",而小兔呢就是"被觀察的對(duì)象"。比較重要的是:小兔發(fā)生的動(dòng)靜(某個(gè)函數(shù)),會(huì)同時(shí)通知到觀察者小狗和小熊,讓他們兩個(gè)也會(huì)做出相應(yīng)的反饋(各自的回調(diào)函數(shù))
/*被觀察者*/ module.exports = function(){ var m_obserSet = [];//觀察者列表 var _self = this; this.addObser = function(observer){ m_obserSet.push(observer);//添加觀察者 } this.doAction = function(){ console.log("Observable do some action"); _self.notifyAllObeser(); } this.notifyAllObeser = function(){//發(fā)生動(dòng)作 for(var key in m_obserSet){//逐個(gè)通知觀察者 m_obserSet[key].update();//觀察者執(zhí)行回調(diào) } } }
希望本文所述對(duì)大家nodejs程序設(shè)計(jì)有所幫助。
- JavaScript設(shè)計(jì)模式之觀察者模式與發(fā)布訂閱模式詳解
- javascript設(shè)計(jì)模式 – 觀察者模式原理與用法實(shí)例分析
- JavaScript設(shè)計(jì)模式之觀察者模式實(shí)例詳解
- JavaScript設(shè)計(jì)模式之觀察者模式(發(fā)布訂閱模式)原理與實(shí)現(xiàn)方法示例
- JS設(shè)計(jì)模式之觀察者模式實(shí)現(xiàn)實(shí)時(shí)改變頁面中金額數(shù)的方法
- Javascript設(shè)計(jì)模式之觀察者模式(推薦)
- Javascript設(shè)計(jì)模式之觀察者模式的多個(gè)實(shí)現(xiàn)版本實(shí)例
- JavaScript設(shè)計(jì)模式之觀察者模式(發(fā)布者-訂閱者模式)
- JavaScript設(shè)計(jì)模式中的觀察者模式
相關(guān)文章
Node交互式的SFTP上傳實(shí)現(xiàn)過程剖析
這篇文章主要為大家介紹了Node交互式的SFTP上傳實(shí)現(xiàn)過程剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Node.js和MongoDB實(shí)現(xiàn)簡(jiǎn)單日志分析系統(tǒng)
這篇文章主要介紹了Node.js和MongoDB實(shí)現(xiàn)簡(jiǎn)單日志分析系統(tǒng),本文給出了服務(wù)器端、客戶端、圖表生成、Shell自動(dòng)執(zhí)行等功能的實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-04-04手把手教你用Node.js爬蟲爬取網(wǎng)站數(shù)據(jù)的方法
這篇文章主要介紹了手把手教你用Node.js爬蟲爬取網(wǎng)站數(shù)據(jù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07Linux環(huán)境部署node服務(wù)并啟動(dòng)詳細(xì)步驟
最近用node.js開發(fā)了一個(gè)web項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于Linux環(huán)境部署node服務(wù)并啟動(dòng)的詳細(xì)步驟,文中通過圖文以及示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05nodejs對(duì)文件中的圖片進(jìn)行歸類操作示例
這篇文章主要為大家介紹了nodejs對(duì)文件中的圖片進(jìn)行歸類的實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Node.js和Express中設(shè)置TypeScript的實(shí)現(xiàn)步驟
本文主要介紹了Node.js和Express中設(shè)置TypeScript的實(shí)現(xiàn)步驟文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11