日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

JavaScript享元模式

發(fā)布時(shí)間:2023/12/9 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript享元模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
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)(變化)圖解

?

posted on 2017-10-19 21:44 WFaceBoss 閱讀(...) 評(píng)論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/wfaceboss/p/7695606.html

總結(jié)

以上是生活随笔為你收集整理的JavaScript享元模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。