/**
* javascripts 代理模式
*
* 故事: 在一个很久远的山村里面,有一天,突然来了一位城市的美女和她的姐妹,美女叫:小芳,她的姐妹:翠花,我❤️上了小芳,我想把奶奶留给我祖传的项链送给小芳,我怕被拒绝心里难受,我就把项链交给她的好姐妹。
* 分析: 四个对象,小芳、翠花、项链、我
* @class Proxymodel
*/
// ========================= 简单代理 ===============================
class Necklace {
constructor(){
console.log('我是主人公的项链!')
}
}
class Me {
sendNecklace(target){
target.acceptNecklace(new Necklace());
}
}
class Cuihua {
acceptNecklace(necklace){
new Xiaofang().acceptNecklace(necklace);
}
}
class Xiaofang {
acceptNecklace(necklace){
console.log('我很喜欢!')
}
}
new Me().sendNecklace(new Cuihua());
// ========================= 翠花告诉我,小芳心情好,表白几率大-----虚拟代理 ===============================
class Necklace {
constructor(){
console.log('我是主人公的项链!')
}
}
class Me {
sendNecklace(target){
target.acceptNecklace();
}
}
class Cuihua {
acceptNecklace(){
new Xiaofang().listenMood(()=>{
new Xiaofang().acceptNecklace(new Necklace());
})
}
}
class Xiaofang {
acceptNecklace(necklace){
console.log('我很喜欢!')
}
listenMood(fn){
setTimeout(()=>{
fn()
},1000);
}
}
new Me().sendNecklace(new Cuihua());
// ========================= 缓存代理 ===============================
function mult(arg){
let a= 1;
for(let i = 0;i<arg.length;i++){
a = a * arg[i];
}
return a;
}
const proxyMult = (function (){
let cache = {};
return function(...argu){
if(argu in cache){
return cache[argu];
}
return cache[argu] = mult.call(this,argu);
}
}());
console.log(proxyMult(1,2,3));
网友评论