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

JavaScript享元模式原理與用法實(shí)例詳解

 更新時(shí)間:2020年03月09日 12:26:04   作者:WFaceBoss  
這篇文章主要介紹了JavaScript享元模式原理與用法,結(jié)合實(shí)例形式總結(jié)分析了JavaScript享元模式基本概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了JavaScript享元模式原理與用法。分享給大家供大家參考,具體如下:

通過兩個(gè)例子的對(duì)比來凸顯享元模式的特點(diǎn):享元模式是一個(gè)為了提高性能(空間復(fù)雜度)的設(shè)計(jì)模式,享元模式可以避免大量非常相似類的開銷。

第一實(shí)例,沒有使用享元模式,計(jì)算所花費(fèi)的時(shí)間和空間使用程度。

要求為:有一個(gè)城市要進(jìn)行汽車的登記

(1)汽車類

/**
   * 制造商
   * 型號(hào)
   * 擁有者
   * 車牌號(hào)碼
   * 最近一次登記日期
   */
  var Car = function(make,model,year,owner,tag,renewDate){
    this.make = make;
    this.model = model;
    this.year = year;
    this.owner = owner;
    this.tag = tag;
    this.renewDate = renewDate;
    this.getMake = function(){
      return this.make;
    }
  }

(2)使用裝飾者模式--計(jì)算函數(shù)的耗時(shí)

//裝飾者 .. 計(jì)算函數(shù)的耗時(shí)
  var simpleProfiler = function(componet){
    this.componet = componet;
    this.action = function(methodName){
      var self = this;
      var method = componet[methodName];
      //如果是函數(shù)那就進(jìn)行裝飾
      if(typeof method == "function"){
        var startDate = new Date().getTime();//開始時(shí)間
        method.apply(self.componet,arguments);
        var endDate = new Date();//結(jié)束時(shí)間
        alert(endDate - startDate);        
      }
    }
  }  

(3)具體的實(shí)例,現(xiàn)有4150000輛車需要登記

var ca = new Array();
  function addCar(){
    this.begin = function(){
      for (var i = 0; i < 4150000; i++) {
        ca.push(new Car("BMW","寶馬","2017-10-18",
          "","GBMW88","2017-10-19"));
      }
    }
  }
  new simpleProfiler(new addCar()).action("begin")

第二個(gè)例子:使用享元模式

(1)汽車類

/**
   * 制造商
   * 型號(hào)
   * 擁有者
   * 車牌號(hào)碼
   * 最近一次登記日期
   */
  var Car = function(make,model,year){
    this.make = make;
    this.model = model;
    this.year = year;
    this.getMake = function(){
      return this.make;
    }
  }

(2)單例模式的簡(jiǎn)單工廠

//單例模式的簡(jiǎn)單工廠
  var myCarInfo = function(){
    this.createCar = function(make,model,year,owner,tag,renewDate){
      var c = carInfoFactory(make,model,year);
      c["owner"] = owner;
      c["tag"] = tag;
      c["renewDate"] = renewDate;
      return c;
    }
  }
  var carInfoFactory = (function(){
    var carInfo = {};
    return function(make,model,year){
      if(carInfo[make+model+year]){
        return carInfo[make+model+year];
      }else{
        var newCar = new Car(make,model,year);
        carInfo[make+model+year] = newCar;
        return newCar;
        a
      }
    }
  })();

(3)現(xiàn)有4150000輛車需要登記

var test = new myCarInfo();
  var startDate = new Date().getTime();
  var ca = new Array();
  for (var i = 0; i < 4150000; i++) {

    ca.push(test.createCar("BMW","寶馬","2017-10-18",
          "","GBMW88","2017-10-19"))
  }
  var endDate = new Date();
  alert(endDate - startDate);

從上述兩個(gè)例子可以知道,第一個(gè)例子沒有使用享元模式相對(duì)于第二個(gè)使用享元模式耗時(shí)間少,但空間消耗大,第二個(gè)耗時(shí)多,但空間消耗小。

第一種情況圖解:每次都生成相同的實(shí)例

 

第二種情況:內(nèi)在部分(不變)+外部狀態(tài)(變化)圖解

感興趣的朋友可以使用在線HTML/CSS/JavaScript前端代碼調(diào)試運(yùn)行工具http://tools.jb51.net/code/WebCodeRun測(cè)試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容還可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

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

相關(guān)文章

  • Firefox下設(shè)為主頁(yè)的JavaScript代碼

    Firefox下設(shè)為主頁(yè)的JavaScript代碼

    在IE下,我們可以輕松使用以下代碼來實(shí)現(xiàn)設(shè)置主頁(yè) 但在firefox我們需要做的更多
    2008-09-09
  • 基于JavaScript實(shí)現(xiàn)電子簽名功能

    基于JavaScript實(shí)現(xiàn)電子簽名功能

    這篇文章主要為大家詳細(xì)介紹了如何通過JavaScript實(shí)現(xiàn)簡(jiǎn)單的電子簽名功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-11-11
  • 在Koa.js中實(shí)現(xiàn)文件上傳的接口功能

    在Koa.js中實(shí)現(xiàn)文件上傳的接口功能

    這篇文章主要介紹了在Koa.js中實(shí)現(xiàn)文件上傳的接口功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 跟我學(xué)習(xí)javascript的prototype原型和原型鏈

    跟我學(xué)習(xí)javascript的prototype原型和原型鏈

    跟我學(xué)習(xí)javascript的prototype原型和原型鏈,感興趣的小伙伴們可以參考一下
    2015-11-11
  • JavaScript獲取select中text值的方法

    JavaScript獲取select中text值的方法

    這篇文章主要介紹了JavaScript獲取select中text值的方法,涉及javascript針對(duì)HTML頁(yè)面元素相關(guān)判斷與獲取操作技巧,需要的朋友可以參考下
    2017-02-02
  • JavaScript中this的用法及this在不同應(yīng)用場(chǎng)景的作用解析

    JavaScript中this的用法及this在不同應(yīng)用場(chǎng)景的作用解析

    由于其運(yùn)行期綁定的特性,JavaScript 中的 this 含義要豐富得多,它可以是全局對(duì)象、當(dāng)前對(duì)象或者任意對(duì)象,這完全取決于函數(shù)的調(diào)用方式,這篇文章主要給大家介紹了JavaScript中this的用法及this在不同應(yīng)用場(chǎng)景的作用解析,一起看看吧
    2017-04-04
  • Javascript判斷對(duì)象是否相等實(shí)現(xiàn)代碼

    Javascript判斷對(duì)象是否相等實(shí)現(xiàn)代碼

    想判斷2個(gè)js對(duì)象,是不是所有完全相同在表單頁(yè)面應(yīng)用是很常見的,接下來分享一段判斷代碼,感興趣的你可以參考下哈,希望可以幫助到你
    2013-03-03
  • next.js?getServerSideProps源碼解析

    next.js?getServerSideProps源碼解析

    這篇文章主要為大家介紹了next.js?getServerSideProps源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 詳解jQuery事件

    詳解jQuery事件

    本文主要介紹了jQuery事件的相關(guān)知識(shí)。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • 原生JS實(shí)現(xiàn)LOADING效果

    原生JS實(shí)現(xiàn)LOADING效果

    這篇文章主要向大家介紹了原生JS實(shí)現(xiàn)的LOADING效果的代碼,效果非常不錯(cuò),而且可以自定義顏色和速度,推薦給大家,希望大家能夠喜歡。
    2015-03-03

最新評(píng)論

安泽县| 五原县| 太仆寺旗| 绍兴市| 镇原县| 阜南县| 越西县| 台安县| 遂溪县| 承德市| 攀枝花市| 大庆市| 长葛市| 呼玛县| 柞水县| 吉木乃县| 常熟市| 通江县| 石家庄市| 黔江区| 南丰县| 沙坪坝区| 汉沽区| 莱州市| 大埔县| 灯塔市| 汝州市| 太康县| 阳城县| 赤城县| 满洲里市| 淳化县| 贺州市| 珲春市| 东台市| 手游| 南涧| 镇江市| 莫力| 凉山| 朔州市|