代码要写成别人看不懂的样子(八)

[ROS] rviz 可视化工具 [ROS] rviz 可视化工具 摄像头没讲 文章目录[ROS] rviz 可视化工具1. todo2. todo*. 参考*. 问题解决*. rough 1. todo 2. todo *. 参考 *. 问题解决 *. rough roscore + rviz 阅读详情

本篇文章参考书籍《JavaScript设计模式》–张容铭

前言

  铁汁们,我又来了,上节的组合模式,各位乱了没?不慌哈,这一节我们一起学个更乱的,就不会觉得上一个乱了。

  大家学东西肯定逃不开一个问题,性能。实现功能的方法千千万,为什么有的方法好,有的方法不合适?很大一部分原因是性能问题,性能这东西,平时不注意,爆发起来可是灾难性的,页面崩溃怕不怕,卡顿怕不怕,这些都是对用户特别不友好的问题。

  最关键的还是不好定位,不好修改,一旦出现,肯定涉及重构,解决成本太大。夫病已成而后药之,乱已成而后治之,譬犹渴而穿井,斗而铸锥,不亦晚乎?

享元模式

  主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。

  举个例子,页面上展示新闻,每页 5 条,想看更多的新闻,需要翻页。这个例子就可以用到享元模式,首先需要一个操作方法。

var Flyweight = function() {
	//已创建元素
	var created = [];
	//创建一个新闻包装容器
	function creat() {
		var dom = document.creatElement('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;
			}
		}
	}
}

  上面我们创建了个享元类,接下来由于每页显示 5 条,所有我们创建 5 个元素,保存在享元类内部,通过享元类的 getDiv 来获取创建的元素,享元类内部的数据和方法完成后,我们需要实现外部数据了。

var paper = 0;
	num = 5;
	len = article.length;
//添加5条新闻
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;
	//插入五条新闻
	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个元素,不用每次翻页的时候,都需要重新创建了。

应用场景

  享元模式在面向对象编程中是很常见的,比如游戏当中,每个角色的移动方法,肯定都是相同的,我们就可以创建一个享元类。

var FlyWeight = {
	moveX: function(x) {
		this.x = x;
	},
	moveY: function(y) {
		this.y = y;
	}
}

  其他任何角色都可以通过继承的方式实现,比如放英雄继承移动方法。

//创建一个英雄类,继承移动方法
var Hero = function(s, y, c) {
	this.x = x;
	this.y = y;
	this.color = c;
}
Hero.prototype = FlyWeight;
Hero.prototype.changeC = function(c) {
	this.color = c;
}
//创建一个怪物类,继承移动方法
var Monster = function(x, y, r) {
	this.x = x;
	this.y = y;
	this.r = r;
}
Monster.prototype = FlyWeight;
Monster.prototype.changeR = function(r) {
	this.r = r;
}

  接下来创建实例

//创建英雄实例
var hero = new Player(5, 6, 'red')
hero.moveX(6);
hero.moveY(7);
console.log(hero); //{x: 6, y: 7, color: 'red'}

//创建怪物实例
var monster = new Player(2, 3, 4)
monster.moveX(3);
monster.moveY(4);
console.log(monster); //{x: 3, y: 4, r: 2}

  各位,本节结束,我们就介绍完了所有的结构型的设计模式,结构型的设计模式目的在将类,对象等,组合成更复杂的结构来应对需求,应用设计模式可以简化其设计方案,让复杂的结构可以变得更合理,易读懂。

  




optee系统启动流程 BL2 - Trusted Boot Firmware,一般为Trusted Bootloader, 也称第一个启动镜像。BL31 - EL3 Runtime Firmware,负责双系统切换,运行在secure monitor 或ATF中。BL33 - Non-Trusted Firmware,一般为uboot、linux kernel。BL32 - Secure-EL1 Payload, 一般为TEE OS Image。BL1 - Trusted ROM,一般为BootRom。 阅读详情

相关推荐

模拟滤波器的基础知识和设计

使用Python实现多种模拟滤波器

faltas的博客 3529

项目开发使用设计模式,开发er直呼内行

一切抛开业务的设计,都是扯淡!在项目中有个我们会对多个接口进行多业务逻辑判断,项目开始工期紧,所以先以实现功能为主,最近打算优化一番,一开始的代码是这样的 public void checkProjectAdd(List<OrderDetail> list) { if (!CollectionUtils.isEmpty(list)) { orderService.check(list); stockService.check(l

fenwei88的博客 298

RPA实战:手把手教你打造抖音自动养号机器人(含避坑指南)

本文详细介绍了如何利用RPA技术从零构建一个智能化的抖音自动养号机器人。内容涵盖环境准备、核心工具选型、拟人化行为流程设计、代码实现模块拆解,并提供了关键的避坑指南与风控对抗策略,帮助开发者高效、稳定地实现账号自动化运营。

orange的博客 559

【搞笑】如何写出别人看不懂自己也看不懂的代码

写在前面:   话说那是很久以前,代码交付按行收费,于是程序员们尽量写出更多行的代码。但自古以来就是道高一尺魔高一丈,于是兴起另一个职业---缩行师。缩行师的职责,就是去掉程序猿代码里多余的代码,将代码的行数尽量降到最低。剥削和反剥削的阶级斗争从来就没有停止过,直到代码交付不再以行数计费。   至于有兴趣了解缩行师职业的人,可以戳一下这里:缩行师职业简介   现如今,天下大势以定,...

dde2522的博客 606

【无标题】EXCEL实现刷题

运用Excel开发的刷题工具,具有普遍实用性,可将WORD的试题自动导入并实现刷题。

weixin_44081794的博客 2970

Qt实战:用QTreeView+QStandardItemModel实现多级多列文件浏览器(附完整代码)

本文深入探讨了使用Qt的QTreeView与QStandardItemModel构建多级多列文件浏览器的完整实践。通过分析模型/视图框架的优势,详细演示了从基础框架搭建、模拟数据填充,到对接真实文件系统实现懒加载的全过程。文章还涵盖了自定义委托、多列排序、右键菜单等高级定制技巧,并提供了性能优化建议和完整的代码示例,帮助开发者打造功能强大且高效的工业级文件管理界面。

weixin_29021291的博客 423

代码要写成别人看不懂的样子(二)

文章目录前言前期准备如何才能让别人看不懂1.四两拨千斤2.指桑骂槐 前言   上一期我们,浅尝辄止,稍微介绍了下代码如何写才能更高级,更有内涵,主要是需要配合继承,或是某些数据特性来说。这一节咱们放个大招,运用兵法来写代码,保证初学者看不懂,既便能看懂,也不知道为什么这样做,即便知道为什么这样做,没有系统学习过的人也做不好。   这部兵法就是–设计模式。 前期准备   各位乡绅,读这本书前,个人建议要对 继承 , 类 (虽然JS在ES6之前没有类,但是可以通过一些手段实现类), 构造函数 ,

不见浅诗的博客 623

YOLOv8改进 | Conv篇 | 轻量级下采样方法ContextGuided(大幅度涨点)

ContextGuided通过创新的局部-全局协同机制,解决了传统下采样方法中细节丢失与上下文缺失的核心痛点。实验证明其在YOLOv8上可实现最高2.6%的mAP提升,且计算开销增加不足5%。这种即插即用的设计为实时目标检测系统提供了新的优化方向。创新启示:轻量化不代表简单裁剪,智能信息融合才是未来方向!下一步探索与Transformer结合构建混合架构多尺度上下文融合机制3D点云中的扩展应用资源获取完整训练代码:[GitHub链接]预训练模型:[Google Drive链接]讨论话题。

QQ_778132974的博客 289

代码要写成别人看不懂的样子(五)

文章目录前言一、外观模式二、适配器模式 前言   通过前面几篇文章,大家估计对对象的创建有了一个新的认识,在很多大型应用里面,对象会相当复杂,但是其刚创建的时候,并不是这样,而是通过后续的组合,封装,才一步一步完善起来的,从本章节开始,我们一块来学一学,如何把这些对象组合的更合理,从而使想强大的功能。 一、外观模式   大家一定绑定过事件,而且一定像下面这样绑定过 document.onclick = fucntion(e) { e.preventDefault(); if(e.target !== d

不见浅诗的博客 455

GEE APP:基于Sentinel-1 SAR数据的洪水检测与制图系统:利用GEE平台实现洪涝区域提取、面积统计及矢量栅格化导出

本文介绍了一个基于Google Earth Engine平台的Sentinel-1 SAR洪水监测应用,通过自动化流程实现洪水淹没区域的精准检测与分析。系统采用Refined Lee滤波降噪和Otsu自适应阈值算法,结合SRTM地形数据消除干扰,可自动计算淹没面积并生成可视化结果。该工具提供用户友好的交互界面,支持多格式数据导出,适用于灾害应急响应、环境监测和城市规划等领域,具有云平台处理、算法鲁棒性强和操作简便等技术优势。

此星光明博客 326

《大数据: Hive 交互命令和常用配置》

一、Hive 交互命令 1. 首先解决一个可能发生的问题 (log4 jar包冲突) 我这里解决方法就是删除一个,我删的是hive下的包 yexiang@hadoop1:<hive>$ hive SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/soft/apache-hive-2.3.7-bin/lib/log4j-slf4j-impl-2.6.2.ja.

yexiang优快云的专栏 287

代码要写成别人看不懂的样子(一)

本篇文章参考以下博文 文章目录前言 前言   最近读了一本书,张容铭老师的 《JavaScript设计模式》 ,书中提到的编码模式,编码风格,让我想起了我刚学 JS 的时候,特别向往像大神一样,全篇没什么 div 罗列,都是方法或者构造函数之类的东西,一顿操作后, body 里面只要添加一个 <div id=“demo”> ,大功告成。   逼格满满有没有,当时就想,什么时候我也能这样,别人看不懂我的代码,所有的事情不用自己手写,只要给一个容器,然后执行函数就

不见浅诗的博客 1713

【OpenFOAM】-olaFlow-算例4- irreg45degTank

不规则波浪模拟

ou_no的博客 2117

代码要写成别人看不懂的样子(十)

本篇文章参考书籍《JavaScript设计模式》–张容铭 文章目录前言状态模式 前言   各位写代码的时候,经常会出现条件判断吧,那么条件判断里面脸最熟的当属 if 了吧,这个东西在我们开始编码的时候,真的是隔一段时间不写,就浑身难受。   但是呢,if 这个东西,哪怕是再简单的判断,也会有隐含问题,而且在代码可读性上,条件判断的效果很不友好,当存在多重判断的时候,简直就是灾难。   所以为了解决条件判断的这些弊端,状态模式应运而生。 状态模式   状态模式:当一个对象的内部状态发生改变时,会导

不见浅诗的博客 447

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

代码要写成别人看不懂的样子(二十)

本篇文章参考书籍《JavaScript设计模式》–张容铭 文章目录前言惰性模式 前言   各位接触过机器学习没有,没了解过也没关系,这东西的大体思路就是,当第一次执行某种情况时,机器会去判断一些情况,到第二次执行的时候,就不需要再重复判断了,那么机器学习就会在第一次执行完成后,记录当时的计算过程,参数等数据,然后重新定义这种特定情况,当再次遇到后,不需要重复判断,直接获取上次的结果就行。   这个机器学习,就很像我们今天要说的惰性模式。真的超级像(我个人猜测,有可能当年发明机器学的人,就是惰性模式用的比较好

不见浅诗的博客 250

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

代码要写成别人看不懂的样子(三)

文章目录前言 前言   书接上回,我们学习了装饰器模式,不知各位道友是否还有印象,               

不见浅诗的博客 416

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

代码要写成别人看不懂的样子(十七)

本篇文章参考书籍《JavaScript设计模式》–张容铭 文章目录前言数据访问对象模式 前言   各位作为一名前端开发,大家有没有遇到过前端存储,比如用户初次进入程序,会有一个个性化引导,一般来说这块功能是交给后台同事来做的,但是有时候需要放在前端,来保存是否第一次登陆的字段。   那我们在本地存储的时候呢,可能会遇到很多问题,每添加一组数据,担心会不会覆盖别人的数据等等,本节的设计模式,就介绍怎么合理前端存储。 数据访问对象模式   抽象和封装对数据源的访问与存储, DAO通过对数据源链接的管理方便对数据

不见浅诗的博客 341

代码要写成别人看不懂的样子(六)

文章目录前言一、代理模式 前言   由于现在网络的发展,访问量,需求量越来越高,很难再使用一台服务器解决所有请求了,这就需要设置专门功能的服务器,来处理专门的业务。比如一个大型应用中,地图功能需要配置一台地图服务器,实况功能需要配置一台媒体服务器,数据上传专门来一台服务器,数据库系统再来一台,管理这些服务器还需要一台。在一些高并发的地方,一台服务器处理不过来,要把请求分散到各个服务器上进行处理。   服务器越来越多,不可避免地要考虑一个问题,跨域请求,跨域本身是一种安全策略,为了网络安全,不能直接请求非本服

不见浅诗的博客 368

代码要写成别人看不懂的样子(十六)

本篇文章参考书籍《JavaScript设计模式》–张容铭 文章目录前言链模式 前言   大家一定用过 JQuery 吧,这东西的一大特性就是链式调用,获取到某个元素后,直接连续执行多个方法,贼帅,其实我们也可以做到。   本节开始,就给大家介绍一些技巧性的设计模式,平时能经常用到,类似语法糖一样,简单易懂,而且功能奇妙,不会像前面的设计模式那样长篇大论,肯定比前面容易接收,而且有趣。 链模式    通过对象方法中,将当前对象返回,实现对同一个对象多个方法的链式调用。   

不见浅诗的博客 192

代码要写成别人看不懂的样子(十三)

本篇文章参考书籍《JavaScript设计模式》–张容铭 文章目录前言备忘录模式 前言   各位有没有做过分页,做分页一定会涉及到上一页,下一页,我们为了页面的流畅性,一般都是只请求当前页的数据,当点击上下页按钮的时候,才会请求对应的数据。   这个策略没错,但是用户一般都很调皮,不会老老实实,只点下一页,或者只点上一页,有时候可能会来回,上一页,下一页疯狂点击,那么这种情况就会疯狂请求数据。   页面很可能会卡死,那有没有什么方法能解决这种调皮鬼行为呢?   有时候我们可以增加点击限制,数据没返回之前,不

不见浅诗的博客 278

代码要写成别人看不懂的样子(九)

本篇文章参考书籍《JavaScript设计模式》–张容铭 文章目录前言模板方法模式 前言   前几节的结构型设计模式,各位学的乱不乱,我个人刚开始接触的时候,也觉得很抽象,不太好理解,尤其是实战的时候,总是不知道在什么情况下使用。记住一点,当我们单纯的创建一个    模板方法模式       ...

不见浅诗的博客 397

代码要写成别人看不懂的样子(十九)

本篇文章参考书籍《JavaScript设计模式》–张容铭 文章目录前言简单模板模式 前言   大家有没有遇到过操作大量节点的情况,比如我们在页面上想要创建一个展示区域,这块区域,需要跟不同的选项来展示不同结构的内容,那我们就需要根据选项来操作不同的节点。首先创建节点,然后创建节点内容,将节点内容插入到创建的节点中,最后将节点插入到父节点中。   这一套操作下俩,一个节点就需要 4 步,如果节点比较多,那这性能消耗就有点遭不住了。   为了解决这一个问题,我们可以使用简单模板方法。如果各位接触过模板字符串

不见浅诗的博客 353

代码要写成别人看不懂的样子(十一)

本篇文章参考书籍《JavaScript设计模式》–张容铭 文章目录前言状态模式 前言    状态模式   

不见浅诗的博客 407

代码要写成别人看不懂的样子(十二)

本篇文章参考书籍《JavaScript设计模式》–张容铭 文章目录前言访问者模式 前言    访问者模式    针对对象结构中的元素,定义在不改变对象的前提下访问结构中元素的新方法 。                         ...

不见浅诗的博客 253

代码要写成别人看不懂的样子(四)

文章目录前言一、简单工厂模式二、安全工厂模式三、抽象工厂模式如何使用四、建造者模式 前言   书接上回,我们学习了装饰器模式,不知各位道友是否还有印象,本集,我们来学一学工厂相关的设计模式,分为三部,简单工厂,工厂方法和抽象工厂。   先个大家打个预防针,工厂相关的设计模式,都是需要面向对象来实现的,而面向对象只是一种思想上的转变,平时我们实现某个功能,是想着如何操作Dom,现在我们需要考虑,把我们要实现的东西转化成一个活生生的对象。   比如在页面左侧增加一个固定窗口展示广告,平常我们会写一个div,然后

不见浅诗的博客 273

代码要写成别人看不懂的样子(七)

本篇文章参考书籍《JavaScript设计模式》–张容铭 文章目录前言一、组合模式 前言   来了各位,本节整个硬活, 一、组合模式    var News = function() { //子组件容器 this.children = []; //当前组件元素 this.element = null; } News.prototype = { init: function() { throw new Error('重写方法'); }, add: function() { throw n

不见浅诗的博客 273
上一篇: 代码要写成别人看不懂的样子(七)
下一篇: 代码要写成别人看不懂的样子(九)
不见浅诗~
博客等级 码龄7年 506粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值