javascript设计模式-享元模式

享元模式采用一个共享来有效的支持大量细小粒度的对象,避免大量有相同内容的类的开销(如内存耗费),共享一个元类。

应用场景:页面存在大量的资源密集型对象;他们具备一些共性,可以分离出公共操作的数据。

一个例子,汽车登记:

    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;
   };
   Car.prototype = {
     getMake:function(){
       returnthis.make;
     },
     getModel:function(){
       returnthis.model;
     },
     getYear:function(){
       returnthis.year;
     },
     transferOwner:function(owner,tag,renewDate){
       this.owner=owner;
       this.tag=tag;
       this.renewDate=renewDate;
     },
     renewRegistration:function(renewDate){
       this.renewDate=renewDate;
     }
    };  

如果汽车数量多了,就使用享元模式。可以将数据分成内部和外部两种数据,和car对象相关的数据(make, model等)可以归结为内部属性,而(owner, renewDate等)可以归结为外部属性。这样,如下代码就可以在同一车里共享同一个对象了,不管转让给谁,只要车是同一车,基本信息是一样的:

var Car=function(make,model,year){
     this.make=make;
     this.model=model;
     this.year=year;
};
Car.prototype={
     getMake:function(){
       returnthis.make;
     },
     getModel:function(){
       returnthis.model;
     },
     getYear:function(){
       returnthis.year;
     }
};
//中间对象,用来实例化Car类
var CarFactory=(function(){
       var createdCars = {};
       return {
       createCar:function(make,model,year){
         var car=createdCars[make+"-"+model+"-"+year];
         return car ? car : createdCars[make +‘-‘+ model +‘-‘+ year] =(new Car(make,model,year));
       }
     };
})();
//数据工厂,用来处理Car的实例化和整合附加数据
var CarRecordManager = (function() {
   var carRecordDatabase = {};
   return {
     addCarRecord:function(make,model,year,owner,tag,renewDate){
       var car = CarFactory.createCar(make, model, year);
       carRecordDatabase[tag]={
           owner:owner,
           tag:tag,
           renewDate:renewDate,
           car:car
       };
     },
     transferOwnership:function(tag, newOwner, newTag, newRenewDate){
         var record=carRecordDatabase[tag];
         record.owner = newOwner;
         record.tag = newTag;
         record.renewDate = newRenewDate;
     },
     renewRegistration:function(tag,newRenewDate){
         carRecordDatabase[tag].renewDate=newRenewDate;
     },
     getCarInfo:function(tag){
         return carRecordDatabase[tag];
     }
   };
})();

通过这种方式,我们做到了将同一车的相同信息保存在一个CarRecordManager对象里,而且只保存一份;相比之前的代码,就可以发现节约了很多内存。

如果一个应用程序使用了大量的对象,而这些大量的对象造成了很大的存储开销时就应该考虑使用享元模式。

时间: 2024-10-12 09:22:37

javascript设计模式-享元模式的相关文章

javascript设计模式——享元模式

前面的话 享元(flyweight)模式是一种用于性能优化的模式,“fly”在这里是苍蝇的意思,意为蝇量级.享元模式的核心是运用共享技术来有效支持大量细粒度的对象.如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就非常有用了.在javascript中,浏览器特别是移动端的浏览器分配的内存并不算多,如何节省内存就成了一件非常有意义的事情.本文将详细介绍享元模式 享元模式初识 假设有个内衣工厂,目前的产品有50种男式内衣和50种女士内衣,为了推销产品,工厂决定生产一些塑料模特来穿上他们

设计模式——享元模式

Flyweight 直译为蝇量.就其表示的模式来说,翻译成享元,确实是不错的 package designpattern.structure.flyweight; public interface Flyweight { void action(int arg); } package designpattern.structure.flyweight; public class FlyweightImpl implements Flyweight { public void action(int

8. 星际争霸之php设计模式--享元模式

题记==============================================================================本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦! 本文地址:http://www.cnblogs.com/davidhhuan/p/4248186.html============================================

[设计模式] javascript 之 享元模式;

享元模式说明 定义:用于解决一个系统大量细粒度对象的共享问题: 关健词:分离跟共享: 说明: 享元模式分单纯(共享)享元模式,以及组合(不共享)享元模式,有共享跟不共享之分:单纯享元模式,只包含共享的状态,可共享状态是不可变,不可修改的,这是享元的内部状态:当然有外部状态就有外部状态,外部状态是可变的,不被共享,这个外部状态由客户端来管理,是可变化的:外部状态与内部状态是独立分开的,外部状态一般作为参数传入享元对象内,但不会影响内部状态的值:外部状态,一用用于获取共享的享元对象,或多或少与内部状

[工作中的设计模式]享元模式模式FlyWeight

一.模式解析 Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨量级”,这里选择使用“享元模式”的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持大量的细粒度对象. 享元模式:主要为了在创建对象时,对共有对象以缓存的方式进行保存,对外部对象进行单独创建 模式要点: 1.享元模式中的对象分为两部分:共性部分和个性化部分,共性部分就是每个对象都一致的或者多个对象可以共享的部分,个性化部分指差异比较大,每个类均不同的部分 2.共性部分的抽象就是此模

设计模式-享元模式

***********************************************声明****************************************************** 原创作品,出自 "晓风残月xj" 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj). 由于各种原因,可能存在诸多不足,欢迎斧正! *******************************************

iOS设计模式——享元模式

公共交通(如公共汽车)已有一百多年的历史了.大量去往相同方向的乘客可以分担保有和经营车辆(如公共汽车)的费用.公共汽车有多个站台,乘客沿着路线在接近他们目的地的地方上下车.到达目的地的费用仅与行程有关.跟保有车辆相比,乘坐公共汽车要便宜得多.这就是利用公共资源的好处. 在面向对象软件设计中,我们利用公共对象不仅能节省资源还能提高性能.比方说,某个人物需要一个类的一百万个实例,但我们可以把这个类的一个实例让大家共享,而把某些独特的信息放在外部,节省的资源可能相当可观(一个实例与一百万个实例的差别)

设计模式——享元模式详解

0. 前言 写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦~本文原创,转载请注明出处为SEU_Calvin的博客. 春运买火车票是一件疯狂的事情,同一时刻会有大量的查票请求涌向服务器,服务器必须做出应答来满足我们的购票需求.试想,这些请求包含着大量的重复,比如从A地到B地的车票情况,如果每次都重复创建一个车票查询结果的对象,那么GC任务将非常繁重,影响性能

C#设计模式-享元模式

前言 最近开始花点心思研究下设计模式,主要还是让自己写的代码可重用性高.保证代码可靠性.所谓设计模式,我找了下定义:是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 为什么要提倡“Design Pattern(设计模式)”? 根本原因是为了代码复用,增加可维护性.因此这次我们来学习下设计模式,最后会通过C#语言来实现这些设计模式作为例子,深刻理解其中的