美文网首页
js.pattern -s 享元模式

js.pattern -s 享元模式

作者: 许道龙 | 来源:发表于2016-07-15 09:46 被阅读0次

优化性能生成大量相似的对象

如页面翻页的时候,只保留结构模板,而替换中间的数据

'use strict';
/**
 * 享元元素
 */
let flyweightIphone = (function () {
    let _model = Symbol("model");
    let _screen = Symbol("screen");
    let _memory = Symbol("memory");
    class iphone {
        constructor(model, screen, memory) {
            this[_model] = model;
            this[_screen] = screen;
            this[_memory] = memory;
        }
    }
    return iphone;
})();

/**
 * 享元工厂
 * @type {{get}}
 */
let flyweightFactory = (function () {
    var iphones = {};
    return {
        get: function (model, screen, memory) {
            const key = model + screen + memory;
            return iphones[key] || new flyweightIphone(model, screen, memory);
        }
    }
})();

/**
 * 享元类
 */
let iphone = (function () {
    let _SN = Symbol("SN");
    let _flyweight = Symbol("flyweight");

    class iphone {
        constructor(model, screen, memory, SN) {
            this[_flyweight] = flyweightFactory.get(model, screen, memory, SN);
            this[_SN] = SN;
        }
    }
    return iphone;
})();

/**
 * 享元测试
 */
let for_iphone = function () {
    var phones = [];
    for (var i = 0; i < 100; i++) {
        let memory = i % 2 == 0 ? 16 : 32;
        phones.push(new iphone("iphone6s", 5.0, memory, i));
    }
}

function cal_fn_time(fn) {
    var timebegin = (new Date()).getTime();
    console.log(for_iphone);
    fn();
    var timeend = (new Date()).getTime();
    return (timeend - timebegin)/1000 + "s";
}

console.log(cal_fn_time(for_iphone));

//享元元素

function IphoneFlyweight(model, screen, memory) {
    this.model = model;
    this.screen = screen;
    this.memory = memory;
}

//享元工厂,生成共享的对象;生成字典保存并获取享元对象

var flyweightFactory = (function () {
    var iphones = {};
    return {
        get: function (model, screen, memory) {
            var key = model + screen + memory;
            if (!iphones[key]) {
                iphones[key] = new IphoneFlyweight(model, screen, memory);
            }
            return iphones[key];
        }
    };
})();

//关键在于除去了唯一的值之外,生成的共享元素并不多,可以直接获取

 function Iphone(model, screen, memory, SN) {
    this.flyweight = flyweightFactory.get(model, screen, memory);
    this.SN = SN;
}

//最终生成的数据

var phones = [];
for (var i = 0; i < 1000000; i++) {
    var memory = i % 2 == 0 ? 16 : 32;
    phones.push(new Iphone("iphone6s", 5.0, memory, i));
}
console.log(phones);

在DOM的应用是:事件委托也运用了享元模式的原理

(".menu").on("click", ".item", function () {
    console.log($(this).text());
})

相关文章

  • js.pattern -s 享元模式

    优化性能、生成大量相似的对象、 如页面翻页的时候,只保留结构模板,而替换中间的数据 //享元元素 //享元工厂,生...

  • 设计模式之享元模式(flyweight模式)

    引入享元模式 享元模式的实例 享元模式的分析 引入享元模式 flyweight是轻量级的意思,指的是拳击比赛中选手...

  • 第4章 结构型模式-享元模式

    一、享元模式的简介 二、享元模式的优缺点 三、享元模式的实例

  • 享元模式

    一、享元模式介绍 二、享元模式代码实例

  • 设计模式--享元模式

    目录 本文的结构如下: 引言 什么是享元模式 模式的结构 典型代码 代码示例 单纯享元模式和复合享元模式 模式扩展...

  • 享元模式C++

    享元模式,就是运用共享技术有效地支持大量细粒度的对象。 享元模式结构图 享元模式基本代码 应用场景 享元模式可以避...

  • 设计模式之——享元模式

    1 享元模式的定义 享元模式:使用共享对象可有效地支持大量细粒度的对象。享元模式是池技术的重要实现方式。享元模式的...

  • 好程序员Java培训​分享java设计模式之享元模式

    好程序员Java培训​分享java设计模式之享元模式,Java设计模式中的享元模式。享元模式有点类似于单例...

  • 结构型模式:享元模式

    文章首发:结构型模式:享元模式 七大结构型模式之六:享元模式。 简介 姓名 :享元模式 英文名 :Flyweigh...

  • Java设计模式(三)

    talk is cheap show me the code 享元模式 享元模式 责任链模式 责任链模式Filte...

网友评论

      本文标题:js.pattern -s 享元模式

      本文链接:https://www.haomeiwen.com/subject/axryjttx.html