代理模式:送花风波

主角介绍

  • 毛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 实现延迟执行,模拟现实场景

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

相关推荐
Zuckjet_41 分钟前
开启 3D 之旅 - 你的第一个 WebGL 三角形
前端·javascript·3d·webgl
2401_863801461 小时前
探索 12 种 3D 文件格式:综合指南
前端·3d
珍宝商店2 小时前
前端老旧项目全面性能优化指南与面试攻略
前端·面试·性能优化
bitbitDown2 小时前
四年前端分享给你的高效开发工具库
前端·javascript·vue.js
YAY_tyy2 小时前
【JavaScript 性能优化实战】第六篇:性能监控与自动化优化
javascript·性能优化·自动化
gnip3 小时前
实现AI对话光标跟随效果
前端·javascript
脑花儿4 小时前
ABAP SMW0下载Excel模板并填充&&剪切板方式粘贴
java·前端·数据库
闭着眼睛学算法5 小时前
【华为OD机考正在更新】2025年双机位A卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】
java·c语言·javascript·c++·python·算法·华为od
烛阴5 小时前
【TS 设计模式完全指南】构建你的专属“通知中心”:深入观察者模式
javascript·设计模式·typescript
lumi.5 小时前
Vue.js 从入门到实践1:环境搭建、数据绑定与条件渲染
前端·javascript·vue.js