javascript - 享元模式

享元模式笔记
  运用共享技术有效的支持大量的细粒度对象,避免对象间拥有相同内容造成多余的开销
  享元模式主要还是对其数据、方法共享分离,它将数据和方法分成内部数据、内部方法和外部数据、外部方法。
  内部方法与内部数据指的是相似或者共有的数据和方法,所以将这部分提取出来减少开销,以提高性能。
  demo实例 实现翻页需求: 测试数据用一个数据数组。享元对象

//创建div元素的方法,只创建规定div元素对象,并对div元素对象共享

 1                 var FlyWeight = function(){
 2                 var created = [];//数组
 3                 //创建方法
 4                 function create(){
 5                     var dom = document.createElement("div");
 6                     document.getElementById("container").appendChild(dom);
 7                     created.push(dom);
 8                     return dom;
 9                 }
10                 return {
11                     getDiv : function(){
12                         if(created.length < 5){
13                             return create();
14                         }else{
15                             var div = created.shift();//数组第一个元素删除,并返回第一个元素的值
16                             created.push(div);
17                             return div;
18                         }
19                     }
20                 }
21                 
22             }

测试数据

1             var article = ["这是第一条新闻","这是第二条新闻","这是第三条新闻","这是第四条新闻","这是第五条新闻","这是第六条新闻","这是第七条新闻",
2             "这是第八条新闻","这是第九条新闻","这是第十条新闻","这是第十一条新闻","这是第十二条新闻","这是第十三条新闻"];

初始化,首页展示数据

1             var pager = 0,num = 5,len = article.length;
2             for(var i = 0;i < 5;i++){
3                 if(article[i]){
4                     FlyWeight().getDiv().innerHTML = article[i];
5                 }
6             }

下一页点击绑定事件方法插入div元素和数据

           document.getElementById("next_page").onclick = function(){
                
                if(article.length < num) return;
                var n=++pager*num%len,j=0;
                for(;j<num;j++){
                    if(article[n+j]){
                        FlyWeight().getDiv().innerHTML = article[n+j];
                    }else if(article[n+j-len]){
                        FlyWeight().getDiv().innerHTML = article[n+j-len];
                    }else{
                        FlyWeight().getDiv().innerHTML = '';
                    }
                }

            }

浏览器显示效果(前端样式自己编写)

点击下一页后(每点击一次插入5条)

posted on 2016-10-26 11:03  惊涛随笔  阅读(279)  评论(0编辑  收藏  举报

导航