代理模式:送花风波

主角介绍

  • 毛xx(男主):内向程序员,暗恋班花徐xx多年
  • 徐xx(女主):高冷学霸,喜欢研究设计模式
  • 戴xx(女闺蜜):徐xx的铁闺蜜,精通面向对象编程

爱情故事中的设计模式 - 代理模式

第一幕:暗恋的苦恼

毛xx默默喜欢着徐xx,苦于没有勇气表白。他听说"送花"是追女生的经典套路,决定在徐xx生日这天送上一束玫瑰。

javascript 复制代码
// 毛xx原始计划:直接送花
const xuxx = {
  receiveFlower: function(flower) {
    console.log(`徐xx收到${flower},但觉得毛xx太土,拒绝了`);
  }
};

xuxx.receiveFlower("玫瑰花");

第二幕:代理出现

戴xx作为徐xx的闺蜜,看不下去毛xx的直男行为。她决定当"代理",先接收鲜花,等待最佳时机再转送给徐xx。

javascript 复制代码
// 戴xx作为代理对象
const daixx = {
  hometown: "和徐xx同个老家",
  receiveFlower: function(flower) {
    console.log(`戴xx收到${flower}`);
    setTimeout(() => {
      console.log("等徐xx心情好时...");
      this.forwardToXu(flower);
    }, 2000);
  },
  forwardToXu: function(flower) {
    console.log(`戴xx转送${flower}给徐xx`);
    xuXXProxy.receiveFlower(flower);
  }
};

第三幕:动态代理

戴xx发现光靠自己还不够,要创造更多机会让两人接触。她设计了一个更智能的代理系统:

javascript 复制代码
// 创建代理 proxy
const xuXXProxy = new Proxy(xuxx, {
  get: function(target, property) {
    if (property === 'receiveFlower') {
      return function(flower) {
        console.log(`代理检测到送花请求:${flower}`);
        if (isGoodMood()) {
          target[property](flower);
        } else {
          console.log("今天心情不好,暂不接收");
          scheduleDelivery(flower);
        }
      };
    }
    return target[property];
  }
});

function isGoodMood() {
  // 判断心情...
  return Math.random() > 0.5;
}

function scheduleDelivery(flower) {
  setTimeout(() => {
    console.log("预约时间到!");
    xuXXProxy.receiveFlower(flower);
  }, 3000);
}

第四幕:完美结局

通过戴xx的巧妙代理,毛xx终于成功送出鲜花,徐xx也在合适的时间收到了花,感受到了毛xx的心意。

javascript 复制代码
// 使用代理后的送花流程
daixx.receiveFlower("永生花");

// 输出:
// 戴xx收到永生花
// 等徐xx心情好时...
// 代理检测到送花请求:永生花
// 徐xx收到永生花,感动地笑了

设计模式解析

  1. 相同接口 :戴xx实现了和徐xx相同的receiveFlower方法
  2. 控制访问:代理可以控制何时何地转交礼物
  3. 延迟执行 :使用setTimeout模拟延迟转交
  4. 增强功能:添加了心情判断、预约送达等功能

技术要点总结

特性 描述
const 声明常量,就像毛xx对徐xx坚定不移的爱
=== 严格相等,就像感情中需要真诚
数据类型 string, number, boolean, object(包含array,function等)
Proxy 强大的代理对象,能拦截各种操作
setTimeout 实现延迟执行,模拟现实场景

这个狗血的爱情故事告诉我们:在软件开发中,就像追求女神一样,有时候我们需要一个"代理"来帮助我们更好地完成任务,处理一些额外逻辑,而不用改变原有对象。这就是代理模式的精髓!

相关推荐
伍哥的传说20 分钟前
鸿蒙系统(HarmonyOS)应用开发之手势锁屏密码锁(PatternLock)
前端·华为·前端框架·harmonyos·鸿蒙
yugi98783822 分钟前
前端跨域问题解决Access to XMLHttpRequest at xxx from has been blocked by CORS policy
前端
浪裡遊33 分钟前
Sass详解:功能特性、常用方法与最佳实践
开发语言·前端·javascript·css·vue.js·rust·sass
旧曲重听11 小时前
最快实现的前端灰度方案
前端·程序人生·状态模式
默默coding的程序猿2 小时前
3.前端和后端参数不一致,后端接不到数据的解决方案
java·前端·spring·ssm·springboot·idea·springcloud
夏梦春蝉2 小时前
ES6从入门到精通:常用知识点
前端·javascript·es6
鹏程十八少2 小时前
7.Android 设计模式 享元模式 在商业项目中的落地
架构
归于尽2 小时前
useEffect玩转React Hooks生命周期
前端·react.js
G等你下课2 小时前
React useEffect 详解与运用
前端·react.js
我想说一句2 小时前
当饼干遇上代码:一场HTTP与Cookie的奇幻漂流 🍪🌊
前端·javascript