代理模式:送花风波

主角介绍

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

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

相关推荐
万少6 分钟前
HarmonyOS Next 弹窗系列教程(3)
前端·harmonyos·客户端
七灵微1 小时前
【后端】单点登录
服务器·前端
持久的棒棒君5 小时前
npm安装electron下载太慢,导致报错
前端·electron·npm
crary,记忆7 小时前
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
前端·webpack·angular·angular.js
漂流瓶jz8 小时前
让数据"流动"起来!Node.js实现流式渲染/流式传输与背后的HTTP原理
前端·javascript·node.js
SamHou08 小时前
手把手 CSS 盒子模型——从零开始的奶奶级 Web 开发教程2
前端·css·web
我不吃饼干8 小时前
从 Vue3 源码中了解你所不知道的 never
前端·typescript
开航母的李大8 小时前
【中间件】Web服务、消息队列、缓存与微服务治理:Nginx、Kafka、Redis、Nacos 详解
前端·redis·nginx·缓存·微服务·kafka
Bruk.Liu8 小时前
《Minio 分片上传实现(基于Spring Boot)》
前端·spring boot·minio
鱼樱前端9 小时前
Vue3+d3-cloud+d3-scale+d3-scale-chromatic实现词云组件
前端·javascript·vue.js