最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NodeJS設(shè)計模式總結(jié)【單例模式,適配器模式,裝飾模式,觀察者模式】

 更新時間:2017年09月06日 10:43:45   作者:lucky芬  
這篇文章主要介紹了NodeJS設(shè)計模式,結(jié)合實例形式總結(jié)分析了nodejs單例模式,適配器模式,裝飾模式,觀察者模式的概念、原理與具體實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了NodeJS設(shè)計模式。分享給大家供大家參考,具體如下:

1 . 單例模式

顧名思義,單例就是保證一個類只有一個實例,實現(xiàn)的方法是,先判斷實例是否存在,如果存在則直接返回,若不存在,則創(chuàng)建實例對象,并將實例對象保存在靜態(tài)變量中,當(dāng)下次請求時,則可以直接返回這個對象實例,這就確保了一個類只有一個實例對象。舉個例子吧~一間學(xué)校剛剛起建還沒有圖書館,有的同學(xué)就向領(lǐng)導(dǎo)提意見:"hey! 哥們,能不能幫我們建一個圖書館? "(想要一個圖書館實例),然后領(lǐng)導(dǎo)說:"no problem??!等我一下,馬上建給你"(實例還沒有建立,便創(chuàng)建一個)。幾個月后,圖書館建好了~有位奇葩同學(xué)也想去圖書館,他卻向領(lǐng)導(dǎo)提出要求: "hey! 哥們,我想去圖書館,能不能幫我建一個?"然后領(lǐng)導(dǎo)說: "no problem個頭阿!那邊已經(jīng)建好了一個,你去那間不就可以了嗎!"(當(dāng)實例已經(jīng)存在的時候,則直接返回已經(jīng)創(chuàng)建的實例)

/*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. 適配器模式

若將一個類的接口轉(zhuǎn)換為客戶希望的另外一個接口,適配器模式可以使原本由于接口不兼容而不能一起工作的那些類可以一起工作。舉個例子吧~小明的老爸大明很愛喝白酒,但是呢喝酒又傷身,小明看到便不忍心,于是他想了方法:把白酒瓶子里面的酒倒掉,換成了白開水(重寫內(nèi)容)。大明看到還是那個酒瓶就沒太在意(接口沒有改變,只是內(nèi)容改變了),一口氣就把"酒"喝完了,還很高興~(此處假設(shè)大明智商比較低..)。因此支配器是一個既不得罪他人,也能達(dá)到自己目的的一個好方法~下面是具體的實現(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. 裝飾模式

裝飾模式可以通過繼承的方式,為一個基類對象擴展功能。舉個例子吧~一顆圣誕樹,一開始什么都沒有。然后Amy看到之后往樹上掛了幾個飾品(擴展原來的基類),然后Billy路過之后,覺得它還差點什么,就把圣誕樹拿過來(繼承),然后也往上面放點其他飾品(繼續(xù)擴展)。

/*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. 觀察者模式

什么是觀察者模式呢?舉個例子吧~小狗同學(xué)和小熊同學(xué)同時喜歡上了班里可愛的小兔同學(xué)。小狗和小熊都會注意著小兔的一舉一動,只有小兔有什么動靜他們兩個都會知道~相對而言呢,小狗和小熊就是小兔的"觀察者",而小兔呢就是"被觀察的對象"。比較重要的是:小兔發(fā)生的動靜(某個函數(shù)),會同時通知到觀察者小狗和小熊,讓他們兩個也會做出相應(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ā)生動作
    for(var key in m_obserSet){//逐個通知觀察者
      m_obserSet[key].update();//觀察者執(zhí)行回調(diào)
    }
  }
}

希望本文所述對大家nodejs程序設(shè)計有所幫助。

相關(guān)文章

  • 搭建基于express框架運行環(huán)境的方法步驟

    搭建基于express框架運行環(huán)境的方法步驟

    Express提供了一個輕量級模塊,把Node.js的http模塊功能封裝在一個簡單易用的接口中,這篇文章主要介紹了搭建基于express框架運行環(huán)境的方法步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Node.js中Express框架使用axios同步請求(async+await)實現(xiàn)方法

    Node.js中Express框架使用axios同步請求(async+await)實現(xiàn)方法

    這篇文章主要介紹了Node.js中Express框架使用axios同步請求(async+await)實現(xiàn)方法,結(jié)合實例形式分析了express框架使用異步交互axios模塊實現(xiàn)同步請求的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2023-04-04
  • node.js 使用ejs模板引擎時后綴換成.html

    node.js 使用ejs模板引擎時后綴換成.html

    本文給大家分享一個nodejs的小技巧,將ejs模板引擎的模板后綴改成.html的使用方法,非常的簡單實用,這里推薦給大家。
    2015-04-04
  • 淺談node模塊與npm包管理工具

    淺談node模塊與npm包管理工具

    這篇文章主要介紹了node模塊與npm包管理工具,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Node升級后vue項目node-sass報錯問題及解決

    Node升級后vue項目node-sass報錯問題及解決

    這篇文章主要介紹了Node升級后vue項目node-sass報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 使用 NodeJS+Express 開發(fā)服務(wù)端的簡單介紹

    使用 NodeJS+Express 開發(fā)服務(wù)端的簡單介紹

    這篇文章主要介紹了使用 NodeJS+Express 開發(fā)服務(wù)端的簡單介紹,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • node.js基礎(chǔ)知識匯總

    node.js基礎(chǔ)知識匯總

    這篇文章主要介紹了node.js基礎(chǔ)知識,幫助大家更好的理解和學(xué)習(xí)node.js,感興趣的朋友可以了解下
    2020-08-08
  • nodejs實現(xiàn)bigpipe異步加載頁面方案

    nodejs實現(xiàn)bigpipe異步加載頁面方案

    本文給大家分享的是使用nodejs結(jié)合bigpipe實現(xiàn)異步加載頁面的方案,非常的實用,也是以后前端性能優(yōu)化的一個方向,希望大家能夠喜歡。
    2016-01-01
  • Node.js?全局變量無法掛載問題解決分析

    Node.js?全局變量無法掛載問題解決分析

    這篇文章主要為大家介紹了Node.js?全局變量無法掛載問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • express中間件加載機制示例詳解

    express中間件加載機制示例詳解

    中間件是一種方法,可以接收客戶端發(fā)來的請求,可以對請求做出響應(yīng),也可以將請求繼續(xù)交給下一個中間件繼續(xù)處理,下面這篇文章主要給大家介紹了關(guān)于express中間件加載機制的相關(guān)資料,需要的朋友可以參考下
    2022-08-08

最新評論

天峻县| 荔浦县| 监利县| 龙江县| 清原| 青浦区| 罗江县| 光泽县| 梨树县| 莱芜市| 丰城市| 玉溪市| 遂宁市| 芦山县| 怀集县| 仁布县| 台东市| 宁强县| 沂南县| 昆山市| 兴文县| 河曲县| 金川县| 兰西县| 滦南县| 扶绥县| 彩票| 唐河县| 迭部县| 阿鲁科尔沁旗| 克拉玛依市| 拉孜县| 资兴市| 绥江县| 乐至县| 汶川县| 竹溪县| 江安县| 慈溪市| 社会| 胶州市|