享元模式(Flyweight):运用共享技术有效地支持大量的细粒度的对象,避免对象间拥有相同内容造成多余的开销。
享元模式主要对数据、方法共享分离,它将数据和方法分成内部数据、内部方法和外部数据、外部方法。
内部方法和内部数据指的是相似或者共有的数据和方法,所以将这一部分提取出来减少开销,以提高性能。

例如一个新闻页面的分页效果

//创建一个享元对象
var Flyweight =function(){
    //已创建的元素
    var created = [];
    //创建一个新闻包装容器
    function create(){
        var dom = document.createElement('div');
        //将容器插入新闻列表容器中
        document.getElementById('container').appendChild(dom);
        //缓存新创建的元素
        created.push(dom);
        //返回创建的新元素
        return dom;
    }
    return {
        //获取创建新闻元素方法
        getDiv : function() {
            //如果已创建的元素小于当前页面元素总个数,则创建
            if(created.length<5){
                return create();
            }else{
                //获取第一个元素并插入到最后面
                var div = created.shift();
                created.push(div)
                return div;
            }
        }
    }
}

提取相似可共享的数据和方法来优化应用
如果使用普通的js实现分页将许多条数据插入在文档中,当数据量大时会造成很大多余开销,导致浏览器卡顿等,使用享元模式,在每触发下一页的时候,只获取当前页的N条数据再插入到页面上,提升性能。