理解:调用者不直接调用目标对象,转而调用代理对象
//然后选择A 心情好的时候把花转交给A,代码如下:
var Flower = function(){};
var xiaoming = {
sendFlower: function( target){
var flower = new Flower();
target.receiveFlower( flower );
}
};
var B = {
receiveFlower: function( flower ){
A.listenGoodMood(function(){ // 监听A 的好心情
A.receiveFlower( flower );
});
}
};
var A = {
receiveFlower: function( flower ){
console.log( '收到花 ' + flower );
},
listenGoodMood: function( fn ){
setTimeout(function(){ // 假设10 秒之后A 的心情变好
fn();
}, 10000 );
}
};
xiaoming.sendFlower( B );
var B = {
receiveFlower: function(flower) {
A.listenGoodMood(function() { // 监听A 的好心情
var flower = new Flower(); // 延迟创建flower 对象
A.receiveFlower(flower);
});
}
};
代理模式包括许多小分类,在JavaScript 开发中最常用的是虚拟代理和缓存代理。虽然代理模式非常有用,但我们在编写业务代码的时候,往往不需要去预先猜测是否需要使用代理模式。当真正发现不方便直接访问某个对象的时候,再编写代理也不迟。