代理模式是一种非常有意义的模式,在生活中可以找到很多代理模式的场景。比如,明星都有经纪人作为代理。如果想请明星来办一场商业演出,只能联系他的经纪人。经纪人会把商业演出的细节和报酬都谈好之后,再把合同交给明星签。
代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问的是替身对象。替身对象对请求做出一些处理之后,再把请求转交给本体对象。
下面用一个故事、一段代码简单演示代理模式
原本:追慕者小明-->送花-->心上人A
代理:追慕者小明-->送花-->跟A相熟的代理B-->心上人A
// 代理模式 好处:
// 1、保护代理:代理B可以帮A过滤掉一些请求
// 2、虚拟代理:把一些开销大的对象,延迟到真正需要它时才创建
class Flower {
constructor (name) {
this.name = name
}
}
// 追慕者小明
let xiaoming = {
name: '小明',
sendFlower (target) {
target.receiveFlower(this.name)
}
}
// 代理B
let B = {
receiveFlower (fromWho) {
// 当然要等A好心情时才送花,也在送花也才创建花
A.listenGoodMood(() => {
A.receiveFlower(new Flower(fromWho + '的花'))
})
}
}
// 心上人A
let A = {
receiveFlower (flower) {
console.log('收到花:' + flower.name)
},
listenGoodMood (fn) {
setTimeout(() => {fn()}, 1000)
}
}
xiaoming.sendFlower(B)
运行结果:收到花:小明的花
网友评论