代理模式:送花风波

主角介绍

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

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

相关推荐
CCF_NOI.33 分钟前
谷歌浏览器深入用法全解析:解锁高效网络之旅
大数据·运维·服务器·前端·计算机·谷歌
paopaokaka_luck3 小时前
基于SpringBoot+Uniapp的健身饮食小程序(协同过滤算法、地图组件)
前端·javascript·vue.js·spring boot·后端·小程序·uni-app
患得患失9494 小时前
【前端】【vscode】【.vscode/settings.json】为单个项目配置自动格式化和开发环境
前端·vscode·json
飛_4 小时前
解决VSCode无法加载Json架构问题
java·服务器·前端
YGY Webgis糕手之路7 小时前
OpenLayers 综合案例-轨迹回放
前端·经验分享·笔记·vue·web
90后的晨仔7 小时前
🚨XSS 攻击全解:什么是跨站脚本攻击?前端如何防御?
前端·vue.js
Ares-Wang7 小时前
JavaScript》》JS》 Var、Let、Const 大总结
开发语言·前端·javascript
90后的晨仔7 小时前
Vue 模板语法完全指南:从插值表达式到动态指令,彻底搞懂 Vue 模板语言
前端·vue.js
你的人类朋友7 小时前
❤️‍🔥微服务的拆分策略
后端·微服务·架构