前言
以下情节纯属虚构🤡 , 但是干货是有地 😋 ~
小说
第一次写课程论文时,我憨憨地新建了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!'
});
血的教训:
- 不要帮女朋友写报告时用工厂模式,除非你想在纪念日debug到凌晨
- 当发现
generateReport('法学').content自动填充《刑法》全文时,赶紧删库跑路 - 永远别让教授知道你会这个,否则你会成为全系的报告生成器
为什么说工厂模式像食堂打饭?
- 你(调用方):只关心拿到什么菜
- 食堂阿姨(工厂):根据你的专业(类型)决定手抖幅度(逻辑)
- 打菜动作(构造函数):一勺、两勺、半勺...都是封装好的操作
(刚准备关机睡觉,室友幽幽传来消息:"大哥,马哲老师说要支持中英双语版报告..." —— 哦,抽象工厂的故事,留到补考后再说吧!)