當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
JavaScript享元模式
生活随笔
收集整理的這篇文章主要介紹了
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js获取当前日期并格式化(多种格式)
- 下一篇: 电子商务网站源码HTML5+CSS3+J