定义
代理模式是为了一个对象提供一个占位符,以便控制对它的访问。
使用场景
提到使用场景,我们能想到第一个反应就是:科学上网。如果是更生活场景一些,那就是代理人,中间商。
从以上场景中,我们就可以看出代理模式的首要条件:代理与本体的一致性。拿上网举例子:对于用户来说,用户只需要输入真实本体的网址就可以正常加载,代理在这里的作用对用户来说是透明的。放到我们实际开发设计中就要满足接口一致性原则。
实现方式
看到代理模式的第一眼,我就想起了以前看过的有关卖牛的电影情节,买家与卖家之间隔了一个中介,双方隔着中介进行报价。这不就是符合了我们学习的代理模式。我们可以用这个为例子进行代码演示
var goods = {
goodsName: 'cow',
goodsAge: 2,
kg: 300,
price: 5000
}
var agent = new Proxy(goods, {
get: function(target, key){
// 这里key必须与goods对象中的key一致,体现了一致性原则,如果不一致就出问题了。
if(key === 'price'){
// 这里返回的是代理人的价格,买家是看不到真实的价格。
return 6000
}
return target[key]
},
set: function(target, key, value){
if(key === 'bid'){
if(value < 6000){
console.log('不行,太少了!')
return false
}else{
target[key] = value
console.log('成交,我小亏一点让给你了')
return value
}
}
}
})
console.log(agent.goodsName) // cow
console.log(agent.goodsAge) // 2
agent.bid = 5000 // 不行,太少了!
console.log(agent.price) //6000
agent.bid = 6000 // 成交,我小亏一点让给你了
总结
代理模式其实并不难,它的设计原则只要满足:代理类和本体类分离,隔开本体类和使用者就可以了