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

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

                 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;
}
}
} }

测试数据

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

初始化,首页展示数据

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

下一页点击绑定事件方法插入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条)

javascript - 享元模式的更多相关文章

  1. 轻松掌握:JavaScript享元模式

    享元模式 在JavaScript中,浏览器特别是移动端的浏览器分配的内存很有限,如何节省内存就成了一件非常有意义的事情.节省内存的一个有效方法是减少对象的数量. 享元模式(Flyweight),运行共 ...

  2. JavaScript享元模式

    通过两个例子的对比来凸显享元模式的特点:享元模式是一个为了提高性能(空间复杂度)的设计模式,享元模式可以避免大量非常相似类的开销. 第一实例,没有使用享元模式,计算所花费的时间和空间使用程度. 要求为 ...

  3. javascript 享元模式 flyweight

    * 适应条件 ** 一个程序中使用了大量的相似对象 造成大的内存开销 ** 对象的大多数状态都可以变为外部状态 ** 剥离出对象的外部状态之后, 可以使用相对较少的共享对象取代大量对象 * 上传文件的 ...

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

    享元模式说明 定义:用于解决一个系统大量细粒度对象的共享问题: 关健词:分离跟共享: 说明: 享元模式分单纯(共享)享元模式,以及组合(不共享)享元模式,有共享跟不共享之分:单纯享元模式,只包含共享的 ...

  5. javascript设计模式学习之十二——享元模式

    一.享元模式的定义及使用场景 享元模式是为了解决性能问题而诞生的设计模式,这和大部分设计模式为了提高程序复用性的原因不太一样,如果系统中因为创建了大量类似对象而导致内存占用过高,享元模式就非常有用了. ...

  6. 读书笔记之 - javascript 设计模式 - 享元模式

    本章探讨另一种优化模式-享元模式,它最适合于解决因创建大量类似对象而累及性能的问题.这种模式在javascript中尤其有用,因为复杂的javascript代码很快就会用光浏览器的所有可用内存,通过把 ...

  7. 《JavaScript设计模式与开发实践》读书笔记之享元模式

    1. 享元模式 享元模式是一种用于性能优化的模式,享元模式的核心是运用共享技术来有效支持大量细粒度的对象 1.1 传统的文件上传方法 以文件上传为例,文件上传功能可以选择依照队列,一个一个的排队上传, ...

  8. javascript设计模式——享元模式

    前面的话 享元(flyweight)模式是一种用于性能优化的模式,“fly”在这里是苍蝇的意思,意为蝇量级.享元模式的核心是运用共享技术来有效支持大量细粒度的对象.如果系统中因为创建了大量类似的对象而 ...

  9. JavaScript设计模式(9)-享元模式

    享元模式 1. 介绍 一种优化模式 适合解决因创建大量类似对象而累积性能问题 javaScript 代码可能很快就用光浏览器的内容,通过把大量独立对象转化为少量共享对象,可以降低运行 Web 应用所需 ...

随机推荐

  1. 记录一则ORA-12154,ORA-12560解决过程

    应用服务器:Windows Server 2008 R2 Enterprise 故障现象:项目侧同事反映应用服务器上的程序连接数据库报错:ORA-12560: TNS: 协议适配器错误 1.故障重现 ...

  2. centos7 mysql数据库安装和配置

    一.系统环境 yum update升级以后的系统版本为 [root@yl-web yl]# cat /etc/redhat-release CentOS Linux release 7.1.1503 ...

  3. 工作流引擎Oozie(二):coordinator

    1. 简介 coordinator是workflow的定时提交器,基于时间条件与数据生成触发(based on time and data triggers).简单点说,coordinator按所定义 ...

  4. 数据库设计(2/9):域,约束和默认值(Domains, Constraints and Defaults)

    对于设计和创建数据库完全是个新手?没关系,Joe Celko, 世界上读者数量最多的SQL作者之一,会告诉你这些基础.和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜.Joe是DMBS杂志是多 ...

  5. Nancy之静态文件处理

    今天我们来谈谈Nancy中的静态文件(JavaScript,CSS等)该如何处理. 在前面的Demo中,我们也已经用到了这一块的内容, 但并没有深入理解,只是停留在使用的层面上. 在进入今天的正题之前 ...

  6. <%@ page contentType="text/html; charset=utf-8" language="java"%>每一个字符的含义

    contentType="text/html:网页类型htmlcharset=utf-8"网页编码类型language="java"网页编程语言<% @ ...

  7. python征程1.1(初识python)

    在学习python前必须要掌握的一些基本知识   1.编程语言 2.python   .  C#   JAVA 3.python:  pypy    cpython     jpython 4.执行方 ...

  8. Linux tree命令

    Linux tree命令用于以树状图列出目录的内容. 执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件. 语法 tree [-aACdDfFgilnNpqstux][-I <范 ...

  9. 转:什么是即时编译(JIT)!?OpenJDK HotSpot VM剖析

    重点 应用程序可以选择一个适当的即时编译器来进行接近机器级的性能优化. 分层编译由五层编译构成. 分层编译提供了极好的启动性能,并指导编译的下一层编译器提供高性能优化. 提供即时编译相关诊断信息的JV ...

  10. javascript 函数初探 (四)--- 回调函数

    回调函数 既然函数与任何被赋值给变量的数据是相同的,那么她当然可以像其他数据那样被定义.删除.拷贝,以及当成参数传递给其它函数. 我们定义一个函数,这个函数有两个函数类型的参数,然后他会分别执行这两个 ...