从复制粘贴到class继承 —— 简单工厂模式 ,你值得拥有🤡

401 阅读3分钟

前言

以下情节纯属虚构🤡 , 但是干货是有地 😋 ~

小说

第一次写课程论文时,我憨憨地新建了20个Word文档:

// 高数报告
const mathReport = {
  title: '微积分在奶茶品控中的应用',
  course: '高等数学',
  pageCount: 5,
  cover: '蓝色模板',
  content: '当我们买奶茶时...'
};

// 大物报告
const physicsReport = {
  title: '论牛顿第三定律与室友起床的相互作用',
  course: '大学物理',
  pageCount: 5, 
  cover: '蓝色模板',
  content: '每天早上...'
};
// 第N个报告...(Ctrl+C按到冒烟)

当教授第5次说"心理学报告要粉色封面"时,我的文件夹里已经堆满了重复文件,甚至把「马克思原理」的封面颜色错贴成猛男粉(别问,问就是深夜赶稿的眼泪)。

直到某天凌晨3点,我盯着满屏的pageCount:5突然顿悟——这不就是《软件工程》课讲的重复代码吗?!于是颤抖着手写出了人生第一个类:

class Report {
  constructor(title, course, content) {
    this.title = title;
    this.course = course;
    this.pageCount = 5; // 学渣の尊严
    this.cover = '蓝色模板'; 
    this.content = content;
  }
}

const math = new Report('奶茶微积分', '高数', '假设奶茶温度变化率...');
const pe = new Report('体测生存指南', '体育', '如何假装扭伤脚踝...');

那一刻我悟了:
✅ 不变的是5页字数+蓝色封面
✅ 变的是标题和鬼扯内容

当卷王开始内卷:
原以为能躺平到毕业,直到学霸室友搞出骚操作:
"兄弟们,各科展示要求变了!
● 文科要自动生成参考文献
● 工科要追加代码附录
● 艺术类要用彩虹渐变封面!
——助教说的,明早截止!"

我含泪写出作死代码:

class ArtReport {
  constructor(title) {
    this.title = title;
    this.course = '艺术鉴赏';
    this.cover = '彩虹.gif'; // 闪瞎助教钛合金眼
    this.specialEffect = true;
  }
  // 重复的pageCount、content去哪了??
}
// 第二天被助教连环call:  
// "同学你的报告为什么在投影仪上蹦迪?"

食堂阿姨教会我的工厂模式:
在第三杯速溶咖啡下肚后,我突然想起食堂打饭逻辑:

  • 你:阿姨,要糖醋排骨(传参)
  • 阿姨:瞥一眼你的专业(类型判断)
  • 手不抖的是计算机系(特殊处理)
  • 浇两勺酱的是机械系(差异化逻辑)

于是写出了救命代码:

const reportFactory = (course, data) => {
  const report = new BaseReport(data.title, data.content);
  
  // 用食堂打饭逻辑处理差异
  const 阿姨の策略 = {
    艺术类: () => report.cover = '七彩祥云模板',
    工科: () => report.appendix = '// 这段代码抄自GitHub',
    体育: () => report.content = '此处省略一万字...'
  };
  
  阿姨の策略[course]?.();
  return report;
}

// 生成体育报告时自动触发求雨BUFF
const peReport = reportFactory('体育', {
  title: '论下雨对体测的重要性',
  content: '萧敬腾,yyds!' 
});

血的教训:

  1. 不要帮女朋友写报告时用工厂模式,除非你想在纪念日debug到凌晨
  2. 当发现generateReport('法学').content自动填充《刑法》全文时,赶紧删库跑路
  3. 永远别让教授知道你会这个,否则你会成为全系的报告生成器

为什么说工厂模式像食堂打饭?

  • 你(调用方):只关心拿到什么菜
  • 食堂阿姨(工厂):根据你的专业(类型)决定手抖幅度(逻辑)
  • 打菜动作(构造函数):一勺、两勺、半勺...都是封装好的操作

(刚准备关机睡觉,室友幽幽传来消息:"大哥,马哲老师说要支持中英双语版报告..." —— 哦,抽象工厂的故事,留到补考后再说吧!)