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

第4课 SiC MOSFET的动态特性——关断过程 本文分析了SiC MOSFET的关断过程,将其划分为四个阶段:栅源电容放电阶段(t6-t7)、米勒平台阶段(t7-t8)、电压过冲阶段(t8-t9)和换流结束阶段(t9-t10)。通过等效电路详细描述了各阶段的电压电流变化特点。同时探讨了MOSFET的极间电容特性,包括输入电容Ciss、输出电容Coss和反向转移电容Crss,分析了它们对器件开关速度、损耗及电压变化速率的影响。研究指出这些非线性电容会显著影响器件的动态性能。 阅读详情

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

前言

  由于现在网络的发展,访问量,需求量越来越高,很难再使用一台服务器解决所有请求了,这就需要设置专门功能的服务器,来处理专门的业务。比如一个大型应用中,地图功能需要配置一台地图服务器,实况功能需要配置一台媒体服务器,数据上传专门来一台服务器,数据库系统再来一台,管理这些服务器还需要一台。在一些高并发的地方,一台服务器处理不过来,要把请求分散到各个服务器上进行处理。

  服务器越来越多,不可避免地要考虑一个问题,跨域请求,跨域本身是一种安全策略,为了网络安全,不能直接请求非本服务器上的资源,甚至连本服务器上不同的端口,也不能直接访问。

  为了能正常请求到我们想要的东西,那我们就必须找一个代理,来帮我们达到目的。这就是今天的代理模式。

一、代理模式

  解决跨域时我们可以用一些小技巧,比如 a 标签的 src 属性,在跳转的时候就可以向其他服务器发送请求。这个请求只能是 get 。并且是单向的,没有响应数据。

//统计代理
var Count = (function() {
	var _img = new Image();
	//返回统计函数
	return function(param) {
		//统计请求字符串
		var str = 'http://www.count.com/a.gif?';
		//拼接字符串
		for(var i in param) {
			str += i + '=' + param[i];
		}
		//发送统计请求
		_img.src = str;
	}
})();

Count({num: 10});

  上面方法毕竟受限,我们还有一种通过 script 标签来完成代理, JSONP 方案

//前端浏览器页面
<script type="text/JavaScript">
//回调函数,打印出来请求数据与响应数据
function jsonpCallBAck(res, req) {
	console.log(res, req);
}
</script>
<script
	type="text/JavaScript"
	src="http://localhost/test/jsonp/php?callback=jsonp CallBack&data=getJsonPData">
</script>
//另外一个域下服务器请求接口
<?php
	/*后端获取请求字段,并生成返回内容*/
	$data = $_GET["data"];
	$callback = $_GET["callback"];
	echo $callback."('success', '".$data."')";
?>

  这种方式类似河上有一条小船,你把要发送的消息放到小船上,让小船带到对岸,然后对岸的人将数据放到船里带回来。这种方式需要其他域有一定的可靠性,因为不知道船会带回来什么。

  还有一种方式,应用的比较广泛,比如现在页面的请求在域X中,请求的地址为域 Y ,那么这两个不同的域会出现跨域问题,那么如果我现在 X 域中,中专门配置一个服务器 A 做代理,所以 X 的请求,先发送到 A 上,然后服务器之间通信是没有跨域问题的,就可以让 A 代理转发请求。

  现代常用的代理有 Nginx , GO 等,大家感兴趣可以去看看,据大神说, GO 代理一个周末就能搞定。

二、装饰着模式

  前面的文章我们已经介绍过装饰者模式了,这里又拿出来,是为了给大家解释一个问题。我们先复习下,装饰者模式是可以不改变原有功能的情况下,增加一些新的功能。之前我们举的例子是在 Function 的原型上增加一个 before 和 after 函数,让执行 函数的时候先执行 before 再执行 fucntion 最后再执行 after ,通过这种方法实现的装饰者。

  下面我们用一种新的实现形式,比如这里有个输入框,点击可以显示输入规则,然后来了个需求,不光要显示输入规则,还希望同时让输入框变为红色。

  修改很简单,找到对应的输入框,增加一个输入框颜色修改就可以了,但是我一个一面如果有很多输入框,都需要增加这个功能,这个时候一个一个修改,就很耗时耗力了。我们可以使用装饰者模式。

//装饰者模式
var decorator = function(input, fn) {
	//获取事件源
	var input = document.getElementById(input);
	//若事件源已经绑定事件
	if(typeof input.onclick === 'function') {
		//缓存事件原有回调函数
		var oldClickFn = input.onclick;
		//为事件定义新的事件
		input.onclick = function() {
			//事件原有回调函数
			oldClickFn();
			//新增回调函数
			fn();
		}
	} else {
		//直接为事件添加新增回调
		input.onclick = fn;
	}
	//其他事情
}

  使用的时候,只要把需要添加的输入框执行一下 decorator 函数就可以。

decorator('tel_input', function() {
	document.getElementById('tel_demo_text').style.border = '1px solid red';
});

  为什么要重新举一个装饰者模式的例子,主要是想让大家明白,设计模式是一种思想,这种思想不受代码限制,不是说我的代码必须要写的一摸一样,才算使用了设计模式,它是一种思维方式。正如本系列文章开篇提到的,设计模式是兵法,要学会兵法的精髓,按照兵法去思考而不是按照兵法做。

  之前介绍的那么多种设计模式里面,除了抽象工厂方法必须要用继承来实现,其余的每一种方法,都不是只有例子里的用法。可以展开自己的想象,很多时候你可能没注意,你已经在使用设计模式的思想来解决问题了。

三、桥接模式

  接下来介绍一个大家一定用过,只是当时不知道的设计模式。桥接模式,举个例子,有一行导航栏,要求鼠标悬浮的时候背景色变深,旁边的导航栏,要求鼠标经过的时候里面的字体颜色。功能差不多,但是又不一样,感觉能合到一起,但是又不知道怎么整合。

var spans = document.getElementByTagName('span');
spans[0].onmouseover = function() {
	this.style.color = 'red';
	this.style.background = '#ddd';
};
spans[0].onmouseout = function() {
	this.style.color = '#333';
	this.style.background = '#f5f5f5';
};

spans[1].onmouseover = function() {
	this.getElementByTagName('strong')[0].style.color = 'red';
	this.getElementByTagName('strong')[0].style.background = '#ddd';
};
spans[1].onmouseout = function() {
	this.getElementByTagName('strong')[0].style.color = '#333';
	this.getElementByTagName('strong')[0].style.background = '#f5f5f5';
};

  上面代码可以看出来,是有一部分冗余的,我们需要对事件的回调函数再处理一下。具体做法如下,我们需要创建一个函数,解除与事件的 this 耦合。

//抽象
function changeColor(dom, color, bg) {
	//设置元素字体
	dom.style.color = color;
	//设置元素的背景颜色
	dom.style.background = bg;
}

var spans = document.getElementByTagName('span');
spans[0].onmouseover = function() {
	changeColor(this, 'red', '#ddd');
};
spans[0].onmouseout = function() {
	changeColor(this, '#333', '#f5f5f5');
};

spans[1].onmouseover = function() {
	changeColor(this.getElementByTagName('strong')[0], 'red', '#ddd');
};
spans[1].onmouseout = function() {
	changeColor(this.getElementByTagName('strong')[0], '#333', '#f5f5f5');
};

  上面的桥接模式用起来,有没有一点像我们之前学习的适配器模式,两种模式总体上是有一点相似,毕竟桥接与适配器,本身中文意思就有相似之处,只不过适配器模式多用在接口转换上,而桥接的特点是实现层与抽象层的分离。

  重申一下,设计模式是思想,要学会按照设计模式思考问题,不要受上面样例的束缚。




2025.05.29【Network】多组学分析:网络互作图绘制 本文介绍了使用R语言进行网络图绘制的方法与技巧。重点讲解了三个核心R包的使用:igraph用于网络图数据准备与基础绘制,ggraph基于图形语法实现高级可视化,networkD3则为网络图添加交互功能。文章涵盖了从基本概念、包安装、创建网络图对象,到自定义样式布局、添加交互性等完整流程,并提供了度分布、聚类系数等网络分析指标的计算方法。通过清晰的代码示例,帮助读者掌握生物信息学数据可视化的关键技能,为复杂数据的直观展示和分析提供实用工具。 阅读详情

相关推荐

启动盘安装Win10完整指南:U盘制作、BIOS设置与分区排错

系统重装是解决电脑卡顿、系统崩溃、病毒残留等问题的基础操作,而U盘启动盘则是目前最主流的安装介质。其核心原理在于通过Rufus等工具,将原版ISO镜像写入U盘,并依据主板固件类型(UEFI或Legacy)选择对应的GPT或MBR分区表,确保引导程序能正确加载。掌握这些底层概念,不仅能提升安装成功率,还能避免因引导模式不匹配导致的黑屏、无法启动等问题。在实际应用中,无论是老旧电脑升级、硬盘更换,还是需要纯净的系统环境,制作一个可靠的启动盘都是必备技能。本文从备份数据、下载官方镜像讲起,逐步演示U盘制作、启动快

weixin_32667955的博客 339

如何让别人看不懂你的 JS 代码?把你当大佬!

我们在上周的文章中一种奇特的 JavaScript 编码风格:Get 一种可以用来装逼的 JavaScript 编码风格,引起了广大网友的热议。这是实际上属于一种代码混淆技术,可以让们的代码更难阅读和逆向,同时也能租网一些恶意爬虫和自动化分析。天我就带大家来看看还有哪些其他能让 JavaScript 代码变得难以分析的代码混淆技术。通过一些转换,它可以变成下面这个样子:怎么做到的呢?我们一起来看一下~...

m0_62051288的博客 834

RTAB-MAP实战:用Realsense D435i在ROS中搭建室内3D地图(附避坑指南)

本文详细介绍了如何在ROS环境下,使用Intel Realsense D435i深度相机和RTAB-MAP算法进行室内3D地图构建的完整实战流程。内容涵盖环境配置、核心节点数据流解析、关键参数调优、地图保存与重定位,并提供了实用的避坑指南,帮助机器人开发者和研究者快速实现稳定的视觉SLAM应用。

weixin_29095049的博客 489

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

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

不见浅诗的博客 1713

Python+Appium实现泛微OA自动打卡:5分钟搭建移动端自动化脚本

移动端自动化测试是软件测试与办公自动化领域的重要技术方向,其核心原理是通过程序模拟用户对手机应用界面的操作,实现重复性任务的自动执行。Appium作为主流的开源移动端自动化框架,基于WebDriver协议,支持跨平台且无需修改被测应用,为自动化脚本开发提供了标准化接口。在工程实践中,结合Python简洁的语法和丰富的生态,可以快速构建稳定可靠的自动化解决方案。这一技术组合的价值在于能够高效处理“重复性、低价值、高频率”的日常操作,例如考勤打卡、数据填报等办公场景,显著提升工作效率。本文以泛微OA Emobi

weixin_28836875的博客 389

skywalking各项指标说明

skywalking各项指标说明

没有简介 2487

怎么写别人看不懂的JavaScript代码

是转换成数字,-是转换并翻转符号位,在表达式里可以大量使用(前后需要空格)或者代替Date.now()与new Date().getTime();恒假值不用0,用“字符串比如42”==true或“字符串”==false,恒为真就是!(“字符串”==true)重点: “”==[],””==0,[]==0 []==![],代替data.length == 0。假阳:“0”==false,false==0,false=="",false==[]甚至:a==2&&a==3不会报错,而是false。

qq_66233357的博客 569

pwscf与wannier90 Hands-On实战训练(一)——费米面计算为例

系列文章目录 Quantum Espresso Hands-On实战训练(三)——DOS计算 文章目录系列文章目录计算过程pwscf直接得到等能面pwscf和wannier90得到等能面pwscf直接得到等能面1. scf2. nscf3. 后处理pwscf和wannier90得到等能面1. Kpoints2. scf3. nscf4. pw2wan及wannier90.x5. XCrySDen可视化 计算过程 pwscf直接得到等能面 pwscf和wannier90得到等能面 pwscf直接得到等能面

weixin_45973682的博客 5070

clion基础知识之函数

函数为什么要使用函数如何定义函数如何调用函数 main函数里面只包含逻辑结构 不包含具体实现 为什么要使用函数 代码出现冗余(重复出现) 函数是一个独立的代码块(一个代码块完成一个功能) 实现模块化 如何定义函数 先声明,后使用,再具体实现 返回值 函数名(函数类型 参数别名){具体实现} 如何调用函数 函数名(实参表列) int max(int a,int b);//定义函数(开头) void show();//定义函数(开头) int main() { int c = max(

crrr_r的博客 1263

Vue3项目实战:CKEditor5富文本编辑器从安装到隐藏不需要的功能

本文详细介绍了在Vue3项目中集成并深度定制CKEditor5富文本编辑器的完整流程。通过分析其模块化架构,指导开发者从标准构建出发,移除图片、表格等冗余插件,创建专属轻量构建,从而显著减小打包体积并提升用户体验。文章结合实战代码,涵盖了环境搭建、自定义构建配置、高级优化技巧等关键步骤。

weixin_29016833的博客 283

s8654

The official Snapdragon Ride SX 4.0 development board provides standardized hardware support for the secondary development and functional verification of the s8654 platform.

qq_39257814的博客 6827

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

本篇文章参考书籍《JavaScript设计模式》–张容铭 文章目录前言等待者模式 前言   本节我们处理一个老生常谈的问题,异步。为什么会出现异步这个问题呢?这要从 JS 出生之前说起。   很久很久以前,天和地还没有分开,宇宙混沌一片。有个叫盘古的巨人,在这混沌之中,一直睡了一万八千年。   有一天,盘古突然醒了。他见周围一片漆黑,就抡起大斧头,朝眼前的黑暗猛劈过去。只听一声巨响,混沌一片的东西渐渐分开了。轻而清的东西,缓缓上升,变成了天;重而浊的东西,慢慢下降,变成了地…   扯远了哈,异步问题是因为

不见浅诗的博客 291

自监督学习原理与代码实战案例讲解

自监督学习原理与代码实战案例讲解 作者:禅与计算机程序设计艺术 1. 背景介绍 1.1 自监督学习的起源与发展 1.1.1 监督学习的局限性

AI天才研究院 623

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

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

不见浅诗的博客 623

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

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

不见浅诗的博客 447

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

不见浅诗的博客 250

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

不见浅诗的博客 416

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

本篇文章参考书籍《JavaScript设计模式》–张容铭 文章目录前言注意事项 前言   铁汁们,我又来了,上节的组合模式,各位乱了没?不慌哈,这一节我们一起学个更乱的,就不会觉得上一个乱了。   通过不同的组合我们可以拼出很多我们像要的东西,只有想不到的需求,没有实现不了的方案。 注意事项      组合模式刚上手有点乱,不过核心思想还是比较清晰明确的,把需求拆分成一个一个子类,让所有子类继承一个虚拟父类就可以了。之前问过一位高人,如何才能写好代码,前辈指点:“ 惟手熟尔 ”。设计模式初学的时候,一定要

不见浅诗的博客 920

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

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

不见浅诗的博客 341

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

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

不见浅诗的博客 192

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

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

不见浅诗的博客 278

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

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

不见浅诗的博客 455

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

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

不见浅诗的博客 397

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

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

不见浅诗的博客 353

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

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

不见浅诗的博客 407

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

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值