【夯实基础】《JavaScript设计模式与开发实践》笔记——代理模式

本文探讨了代理模式在不同场景中的应用,如保护代理过滤请求、虚拟代理延迟初始化、缓存代理优化计算性能、防火墙代理保障网络安全,以及远程代理、智能引用代理和写时复制代理等高级概念。理解这些代理类型有助于提高软件设计的灵活性和性能优化。
摘要由CSDN通过智能技术生成

  • 定义
    为一个对象提供一个代用品或占位符,以便控制对它的访问
  • 关键
    当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身 对象来控制对这个对象的访问,客户实际上访问的是替身对象。替身对象对请求做出一些处理之 后,再把请求转交给本体对象。

保护代理

代理 B 可以帮助 A 过滤掉一些请求,比如送花的人中年龄太大的或者没有宝马的,这种请求就可以直接在代理 B 处被拒绝掉。这种代理叫作保护代理

  • 作用
    用于控制不同权限的对象对目标对象的访问

虚拟代理

假设现实中的花价格不菲,导致在程序世界里,new Flower 也是一个代价昂贵的操作, 那么我们可以把 new Flower的操作交给代理 B 去执行,代理 B 会选择在 A 心情好时再执行 new Flower

  • 作用
    把一些开销很大的对象,延迟到 真正需要它的时候才去创建
  • 单一职责原则
    就一个类(通常也包括对象和函数等)而言,应该仅有一个引起它变 化的原因

缓存代理

缓存代理可以为一些开销大的运算结果提供暂时的存储,在下次运算时,如果传递进来的参数跟之前一致,则可以直接返回前面存储的运算结果。

  • 例子-计算乘积
// 先创建一个用于求乘积的函数:
var mult = function(){
	console.log( '开始计算乘积' );
	var a = 1;
	for ( var i = 0, l = arguments.length; i < l; i++ ){
		a = a * arguments[i];
	}
	return a;
}
mult( 2, 3 ); // 输出: 6
mult( 2, 3, 4); // 输出: 24
// 现在加入缓存代理函数
var proxyMult = (function(){
	var cache = {};
	return function(){
		var args = Array.prototype.join.call( arguments, ',' );
		if ( args in cache ){
			return cache[ args ];
		}
		return cache[ args ] = mult.apply( this, arguments );
	}
})();
proxyMult( 1, 2, 3, 4 ); // 输出:24
proxyMult( 1, 2, 3, 4 ); // 输出:24
// 当我们第二次调用 proxyMult( 1, 2, 3, 4 )的时候, 本体 mult 函数并没有被计算,proxyMult直接返回了之前缓存好的计算结果。
// 通过增加缓存代理的方式,mult 函数可以继续专注于自身的职责——计算乘积,缓存的功能 是由代理对象实现的

防火墙代理

控制网络资源的访问,保护主题不让“坏人”接近

远程代理

为一个对象在不同的地址空间提供局部代表,在 Java 中,远程代理可以是另 一个虚拟机中的对象。

智能引用代理

取代了简单的指针,它在访问对象时执行一些附加操作,比如计算一个
对象被引用的次数。

写时复制代理

通常用于复制一个庞大对象的情况。写时复制代理延迟了复制的过程,
当对象被真正修改时,才对它进行复制操作。写时复制代理是虚拟代理的一种变体,DLL (操作系统中的动态链接库)是其典型运用场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值