中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript設計模式之享元模式的示例分析

發布時間:2021-06-26 10:11:10 來源:億速云 閱讀:129 作者:小新 欄目:web開發

這篇文章主要為大家展示了“JavaScript設計模式之享元模式的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“JavaScript設計模式之享元模式的示例分析”這篇文章吧。

具體如下:

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

第一實例,沒有使用享元模式,計算所花費的時間和空間使用程度。

要求為:有一個城市要進行汽車的登記

(1)汽車類

/**
* 制造商
* 型號
* 擁有者
* 車牌號碼
* 最近一次登記日期
*/
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)使用裝飾者模式--計算函數的耗時

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

(3)具體的實例,現有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")

第二個例子:使用享元模式

(1)汽車類

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

(2)單例模式的簡單工廠

//單例模式的簡單工廠
  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)現有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);

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

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

JavaScript設計模式之享元模式的示例分析

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

JavaScript設計模式之享元模式的示例分析

以上是“JavaScript設計模式之享元模式的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尼木县| 河间市| 胶南市| 河曲县| 宿松县| 定安县| 武山县| 临夏县| 中山市| 靖西县| 莱州市| 区。| 丹棱县| 新竹县| 青河县| 遂溪县| 榕江县| 阿拉善盟| 长沙县| 敖汉旗| 昌吉市| 华阴市| 高平市| 翁牛特旗| 九台市| 泰顺县| 庄河市| 杭锦后旗| 台南县| 金堂县| 普格县| 浏阳市| 如皋市| 武山县| 汝阳县| 姜堰市| 榆中县| 太和县| 庆城县| 五大连池市| 陆河县|