JavaScript设计模式之享元模式实例详解
网络编程 2021-07-04 15:50www.168986.cn编程入门
这篇文章主要介绍了JavaScript设计模式之享元模式,结合实例形式较为详细的分析了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(po){ this.po = po; this.action = function(methodName){ var self = this; var method = po[methodName]; //如果是函数那就进行装饰 if(typeof method == "function"){ var startDate = new Date().getTime();//开始时间 method.apply(self.po,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程序设计有所帮助。
上一篇:npm 常用命令详解(小结)
下一篇:vuex页面刷新后数据丢失的方法
编程语言
- 机械手焊接机器人编程 机械手焊接设备编程
- vb数据库编程实例,vb做数据库
- tiobe世界编程语言排行榜,全球编程语言排行
- 成都java编程培训 成都it编程培训中心
- 编程基础培训,编程基础知识培训
- flash游戏编程基础教程,flash游戏开发教程
- 不会英语能学编程吗 不会英语可以学程序员吗
- 爱心代码编程C语言 爱心代码编程c语言公式
- c语言编程学习入门 c语言编程快速入门
- 西门子plc编程培训 西门子plc编程培训班
- 哪里可以学编程 台州哪里可以学编程
- 少儿编程哪个好 少儿编程哪个品牌好
- 编程是什么意思,图形编程是什么意思
- c语言编程软件下载,c语言编程软件在哪下载
- java编程软件下载,java编程下载手机版
- ug编程培训学校,ug编程培训教程