JavaScript设计模式之享元模式实例详解

作者:吴封斌技术博客 时间:2024-04-17 10:08:34 

本文实例讲述了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程序设计有所帮助。

来源:https://www.cnblogs.com/wfaceboss/p/7695606.html

标签:JavaScript,设计模式,享元模式
0
投稿

猜你喜欢

  • xhEditor的异步载入实现代码

    2022-01-29 10:40:28
  • [JS]用 或 || 来兼容FireFox

    2013-06-26 14:50:47
  • TensorFlow tf.nn.conv2d实现卷积的方式

    2021-07-19 08:54:28
  • python基础教程之自定义函数介绍

    2021-09-12 13:10:24
  • asp如何在线修改数据库表?

    2010-06-26 12:24:00
  • Python中私有属性的定义方式

    2023-11-01 16:47:17
  • MySql .frm数据库文件导入的问题

    2024-01-18 19:08:09
  • 处理及遍历XML文档DOM元素属性及方法整理

    2024-05-13 10:39:38
  • [翻译]标记语言和样式手册 Chapter 12 CSS布局

    2008-02-13 14:19:00
  • python中使用urllib2伪造HTTP报头的2个方法

    2022-10-19 07:05:06
  • pycharm 使用心得(九)解决No Python interpreter selected的问题

    2021-03-03 03:32:11
  • mysql连接查询详解

    2024-01-15 16:42:11
  • Vue中使用和移除总线Bus的注意事项详解

    2024-06-05 15:30:33
  • Python文件基本操作实用指南

    2022-05-05 23:22:28
  • HTML5设计原则

    2012-04-26 16:46:45
  • 制作Python数字华容道的实现(可选择关卡)

    2022-12-20 19:32:18
  • MySQL 及 SQL 注入与防范方法

    2024-01-28 02:55:53
  • 小程序自定义弹出框效果

    2023-07-02 03:47:33
  • PHP函数shuffle()取数组若干个随机元素的方法分析

    2023-10-14 16:06:55
  • PHP 接入微信扫码支付总结(总结篇)

    2024-05-13 09:53:31
  • asp之家 网络编程 m.aspxhome.com