NodeJS設計模式

來源:互聯網
上載者:User

1 . 單例模式

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

/*singleInstance.js*/var _instance = null;//定義初始化_instancemodule.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();//觀察者執行回調        }    }}






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.