三分钟学JS设计模式(五)代理模式

代理模式是一种设计模式,用于在客户端和目标对象之间创建一个代理,以控制对目标对象的访问。例如,外卖骑手作为商家与客户的代理,实现业务隔离并提供额外功能。代理模式的优点包括隔离作用和高扩展性,但可能增加额外开销。应用场景包括属性代理(如限制访问某些属性)、缓存代理(如网络请求缓存)和虚拟代理(如图片懒加载)。
摘要由CSDN通过智能技术生成

代理模式

一、什么是代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。

举个栗子:我们上饱了么点外卖的时候商家做外卖并不是直接送的,而是把外卖给了骑手(代理)送到你的手中,你和商家是没有直接接触的。骑手代理你的外卖期间可以做很多事情比如偷吃你一根香肠。

二、 优缺点

  • 优点:

    • 1、隔离作用:
      如上栗子,商家跟客户直接隔着骑手(代理),客户只能吃商家的外卖,并不能因为难吃殴打老板。因为骑手只代理送外卖业务,并不负责打人。
    • 2、高扩展性;
      商家可以让骑手代理送,可以让美团骑手送(换代理),也可以亲自送(去掉代理)
  • 缺点:

    • 多一层代理,可能会带来额外的消耗和时间
      骑手送到后发现外卖有虫子,退货也需要通过骑手,如果直接对接商家可以直接退。

三、场景例子、代码实现

  • 场景一:属性代理
// 以下涉及ES6+语法

const waimai = {
	rice:null,
	hotdog:null
};
// 骑手代理
const waimaiProxy = new Proxy(waimai,{
	get:function(target,key){
		if(key === 'hotdog'){
			return null;
		}
		return target[key];
	},
	set:function(target,key,value){
		target[key] = value
		return true;
	}
})
// 商家:执行set操作
waimaiProxy.rice = "五常大米一碗";
waimaiProxy.hotdog = "变态辣热狗一根";

// 顾客:吃饭发现少了个热狗
console.log(`rice:${waimaiProxy.rice};hotdog:${waimaiProxy.hotdog}`)
// console.log: rice:五常大米一碗;hotdog:null
  • 场景二:缓存代理

自己做个网络请求缓存工具,当同个请求的时候返回值跟第一次返回的一样:

// 网络请求工具:
const ajaxRemote = function(url){
	console.log('访问了'+url);
	return fetch(url)
}

const cache = {};
const ajaxRemoteProxy = function(url){
	if(cache[url]){
 		cache.url = ajaxRemote(url);
	}
	return cache.url;
}
// 连续发起三次请求:
ajaxRemoteProxy('https://www.baidu.com/')
ajaxRemoteProxy('https://www.google.com/')
ajaxRemoteProxy('https://www.baidu.com/')

// console.log:
// 访问了https://www.baidu.com/
// 访问了https://www.google.com/
// 第二次请求百度的时候发现有缓存了,就不再发起请求,直接使用缓存

缓存代理可以缓存网络请求结果、同理还能缓存计算量比较大的结果

let cache = null;
const getConfig = () =>{
  if(cache){
	cache = JSON.parse(localStorage.get('USER_INFO'))
  }
  return cache;
}
  • 虚拟代理
    可以用虚拟代理解决图片懒加载问题(先显示Loading,图片加载完后再替换loading)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值