JavaScript设计模式——代理模式

代理模式

定义:当不方便直接访问一个对象或者不满足需要的时候,提供一个对象来控制堆这个对象的访问。

代理模式分为很多类,常用的有:保护模式、虚拟代理、缓存代理。
下面以虚拟代理实现图片预加载为例,理解代理模式的特点。

图片预加载:当请求图片较大时,首先使用一张 loading 占位,通过异步的方式加载图片资源,等到图片资源加载完成后,再替换 loading 占位图片链接。

实现代码

// 图片展示类
class showImg {
	constructor(src){
		this.init(src);
	}
	// 创建图片结点
	init(src){
		console.log("创建结点")
		this.imgNode = new Image();
		document.body.appendChild(this.imgNode);
		this.imgNode.src = src;
	}
	// 设置图片链接
	setSrc(src){
		this.imgNode.src = src;
	}
}

// 图片代理类
class proxyImg {
	constructor(src,img){
		this.proxyImg = new Image();
		this.proxyImg.src = src;
		//页面加载完成后,改变图片链接
		this.proxyImg.onload = ()=>{
			this.setSrc(img)
		}
	}
	setSrc(img){	
		setTimeout(()=>img.setSrc(this.proxyImg.src),1000);//模拟1秒后才加载完成图片
	}
}
			
let img = new showImg('./imgs/fish.png');
let proxyImgs = new proxyImg('./imgs/car.jpg',img);

这种模式的关键点在于:本体对象和代理对象接口的一致性。也就是说如果需要不通过代理进行操作,那么直接操作本体对象依然可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值