這篇文章主要介紹了NodeJS設計模式,結合實例形式總結分析了nodejs單例模式,適配器模式,裝飾模式,觀察者模式的概念、原理與具體實現技巧,需要的朋友可以參考下
本文實例講述了NodeJS設計模式。分享給大家供大家參考,具體如下:
1 . 單例模式
顧名思義,單例就是保證一個類別只有一個實例,實現的方法是,先判斷實例是否存在,如果存在則直接返回,若不存在,則創建實例對象,並將實例對象保存在靜態變量中,當下次請求時,則可以直接返回這個對象實例,這就確保了一個類只有一個實例物件。舉個例子吧~一間學校剛起建還沒有圖書館,有的同學就向領導提意見:"hey! 哥們,能不能幫我們建一個圖書館? "(想要一個圖書館實例),然後領導說:"no problem啊!等我一下,馬上建給你"(實例還沒建立,便創建一個)。幾個月後,圖書館建好了~有位奇葩同學也想去圖書館,他卻向領導提出要求: "hey! 哥們,我想去圖書館,能不能幫我建一個?"然後領導說: "no problem個頭阿!那邊已經建好了一個,你去那間不就可以了嗎!"(當實例已經存在的時候,則直接返回已經創建的實例)
/*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. 適配器模式
若將一個類別的接口轉換為客戶希望的另外一個接口,適配器模式可以使原本由於接口不相容而不能一起工作的那些類別可以一起工作。舉個例子吧~小明的老爸大明很愛喝白酒,但是呢喝酒又傷身,小明看到便不忍心,於是他想了方法:把白酒瓶子裡面的酒倒掉,換成了白開水(重寫內容)。大明看到還是那個酒瓶就沒太在意(接口沒有改變,只是內容改變了),一口氣就把"酒"喝完了,還很高興~(此處假設大明智商比較低..)。因此支配器是一個既不得罪他人,也能達到自己目的的一個好方法~下面是具體的實現方法
/*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();//重写的内容 adapteeObj.specialRequest(); } } util.inherits(Adapter, Target);//通过继承原模块, 获得原接口 module.exports = Adapter;
3. 裝飾模式
裝飾模式可以透過繼承的方式,為一個基底類別物件擴充功能。舉個例子吧~一顆聖誕樹,一開始什麼都沒有。然後Amy看到之後往樹上掛了幾個飾品(擴展原來的基類),然後Billy路過之後,覺得它還差點什麼,就把聖誕樹拿過來(繼承),然後也往上面放點其他飾品(繼續擴展)。
/*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');//拓展内容 } } util.inherits(Decorator, Base);//继承 module.exports = Decorator;
4. 觀察者模式
什麼是觀察者模式呢?舉個例子吧~小狗同學和小熊同學同時喜歡上了班上可愛的小兔同學。小狗和小熊都會注意著小兔的一舉一動,只有小兔有什麼動靜他們兩個都會知道~相對而言呢,小狗和小熊就是小兔的"觀察者",而小兔呢就是"被觀察的對象"。比較重要的是:小兔發生的動靜(某個函數),會同時通知到觀察者小狗和小熊,讓他們兩個也會做出相應的反饋(各自的回調函數)
/*被观察者*/ 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(){//发生动作 for(var key in m_obserSet){//逐个通知观察者 m_obserSet[key].update();//观察者执行回调 } } }
以上是NodeJS單例模式,適配器模式,裝飾模式,觀察者模式總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!