zoukankan      html  css  js  c++  java
  • 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条)

  • 相关阅读:
    题解-Quantifier Question
    题解-[WC2011]最大XOR和路径
    笔记-Recursive Queries
    树套树
    SG函数
    题解-Magic Ship
    分块
    文章根据时间段显示的微信名和微信号
    jquery 在页面上根据ID定位(jQuery锚点跳转及相关操作) 经典
    nginx配置反向代理
  • 原文地址:https://www.cnblogs.com/jtnote/p/5999545.html
Copyright © 2011-2022 走看看