js设计模式之结构型享元模式详解
发布时间 - 2026-01-11 03:04:02 点击率:次运用共享技术有效地支持大量的细粒度的对象,避免对象间拥有相同内容造成多余的开销。
享元模式主要是对其数据、方法共享分离,将数据和方法分成内部数据、内部方法和外部数据、外部方法。内部方法与内部数据指的是相似或共有的数据和方法,所以将其提取出来减少开销。
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() {
// 如果已创建的元素小于当前页元素总个数(5个),则创建
if(created.length < 5) {
return created();
} else {
// 获取第一个元素,并插入去后面
var div = created.shift();
created.push(div);
return div;
}
}
}
}
上面创建一个享元类,由于每页只能显示5条新闻,所以创建5个元素,保存在享元类内部,可以通过getDiv方法来获取创建的元素。下面就要实现外部数据和外部方法,外部数据就是我们要显示的所有新闻内容,由于每个内容都不一样肯定不能共享。
var paper = 0,
num = 5,
len = article.length;
// 添加五条新闻
for(var i = 0; i < 5; i++) {
if(article[i])
// 通过享元类获取创建的元素并写入新闻内容
Flyweight.getDiv().innerHTML = article[i];
}
// 下一页按钮绑定事件
document.getElementById('next_page').onclick = function() {
// 如果新闻内容不足5条则返回
if(article.length < 5) {
return;
}
var n = ++paper * num % len, // 获取当前页的第一条新闻索引
j = 0;
// 插入5条新闻
for(; j < 5; j++) {
// 如果存在n+j条则插入
if(article[n + j]) {
Flyweight.getDiv().innerHTML = article[n + j];
// 否则插入起始位置第n+j-len条
} else if(article[n + j - len]) {
Flyweight.getDiv().innerHTML = article[n + j - len];
} else {
Flyweight.getDiv().innerHTML = "";
}
}
}
这样用享元模式对页面重构之后每次操作只需要操作5个元素,这样性能可以提高很多。
享元模式的应用是为了提高程序的执行效率与系统性能,因此在大型系统开发中应用比较广泛,可以避免程序中的数据重复。应用时一定要找准内部状态与外部状态,这样才能更合理地提取分离。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js
# 设计模式
# 结构型享元模式
# 结合ES6 编写 JavaScript 设计模式中的结构型模式
# 创建一个
# 都不
# 第一个
# 下一页
# 当前页
# 将其
# 每页
# 对其
# 可以通过
# 有效地
# 只需要
# 第一条
# 指的是
# 方法来
# 绑定
# 大家多多
# 找准
# 五条
# 重构
# 主要是
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
jquery插件bootstrapValidator表单验证详解
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
如何破解联通资金短缺导致的基站建设难题?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
EditPlus 正则表达式 实战(3)
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
js代码实现下拉菜单【推荐】
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何在IIS管理器中快速创建并配置网站?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
Laravel怎么在Controller之外的地方验证数据
如何在景安云服务器上绑定域名并配置虚拟主机?
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
香港服务器如何优化才能显著提升网站加载速度?
如何在万网自助建站中设置域名及备案?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
Android自定义listview布局实现上拉加载下拉刷新功能
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
如何在宝塔面板中修改默认建站目录?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
如何在建站之星网店版论坛获取技术支持?
JavaScript如何实现倒计时_时间函数如何精确控制
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
Java遍历集合的三种方式
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
浅析上传头像示例及其注意事项
Laravel如何实现用户密码重置功能?(完整流程代码)
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
进行网站优化必须要坚持的四大原则
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
非常酷的网站设计制作软件,酷培ai教育官方网站?
高防服务器租用首荐平台,企业级优惠套餐快速部署
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
如何在阿里云服务器自主搭建网站?
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】

