本文已参与「新人创作礼」活动,一起开启掘金创作之路
理解
是为一个对象提供一个代用品或占位符,以便控制对它的访问
let Flower = function() {}
let xiaoming = {
sendFlower: function(target) {
let flower = new Flower()
target.receiveFlower(flower)
}
}
let B = {
receiveFlower: function(flower) {
A.listenGoodMood(function() {
A.receiveFlower(flower)
})
}
}
let A = {
receiveFlower: function(flower) {
console.log('收到花'+ flower)
},
listenGoodMood: function(fn) {
setTimeout(function() {
fn()
}, 1000)
}
}
xiaoming.sendFlower(B)
<ul id="ul">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<script>
let ul = document.querySelector('#ul');
ul.addEventListener('click', event => {
console.log(event.target);
});
</script>
优点
代理模式能将代理对象与被调用对象分离,降低了系统的耦合度。
代理模式在客户端和目标对象之间起到一个中介作用,
这样可以起到保护目标对象的作用
代理对象可以扩展目标对象的功能;
通过修改代理对象就可以了,符合开闭原则;
缺点
处理请求速度可能有差别,非直接访问存在开销