JS设计模式-02-代理模式

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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值