1. 代理模式
分类:结构型
关键点: 代理模式又叫 委托模式 ,是为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。 代理模式通俗来讲就是我们生活中常见的中介。
2. 任务
实现内容:
任务 1:
小王想取 100 块钱(wantMoney),直接去银行取,得到 100,但耗时 60;通过中介 A,中介费 5,但耗时减少 30;通过中介 B,中介费 10,但耗时减少 50
任务 2:
现有函数(onClicked),每调用一次打印一个日志(hello world + 输入数据),现有场景,1 秒调用 10 次,但要求将发送 1 秒内的调用统一一起发送。
3. JS 实现
3.1. 任务一:
let bank = {
getMoney: function (name) {
return { num: 100, costTime: 60 };
},
};
let proxyA = {
getMoney: function (name) {
let ret = bank.getMoney();
ret.num -= 5;
ret.costTime -= 30;
return ret;
},
};
let proxyB = {
getMoney: function (name) {
let ret = bank.getMoney();
ret.num -= 10;
ret.costTime -= 50;
return ret;
},
};
let me = {
wantMoney: function (obj) {
return obj.getMoney();
},
};
console.log(me.wantMoney(bank));
console.log(me.wantMoney(proxyA));
console.log(me.wantMoney(proxyB));
3.2. 任务二:
//任务2:
//现有函数( onClicked ),每调用一次打印一个日志(hello world),现有场景,1秒调用10次,但要求将发送1秒内的调用统一一起发送。
function onClicked(input) {
console.log(`hello world ${input}`);
}
let onClickedProxy = (function () {
let saved = [];
let handle;
return function (input) {
saved.push(input);
if (handle) {
return;
}
handle = setInterval(() => {
for (let i = 0; i < saved.length; i++) {
onClicked(saved[i]);
}
saved = [];
}, 1000);
};
})();
let i = 0;
setInterval(function () {
onClickedProxy(i++);
}, 100);