GoF设计模式——工厂方法模式
h5打开以查看为什么需要简单工厂模式?假设在开发一个通知系统,最初只支持邮件通知:Notification n = new EmailNotification(); n.send("欢迎注册");简单直接,没毛病。后来产品加了短信通知,代码变成了这样:// 订单模块 if (type.equals("email")) { n = new EmailNotification(); } else if (type.equals("sms")) { n = new SmsNotification(); } n.send("订单已提交"); // 用户模块 if (type.equals("email")) { n = new EmailNotification(); } else if (type.equals("sms")) { n = new SmsNotification(); } n.send("注册成功"); // 营销模块 if (type.equals("email")) { n = new EmailNotification(); } else if (type.equals("sms")) { n = new SmsNotification(); } n.send("限时优惠来袭");同一段if-else复制粘贴到十个地方。产品说"把默认通知方式改成短信",得满世界找,改漏一个就是线上 bug。这就是选择逻辑散落的痛——不是构造有多复杂,而是同样的判断写了十遍,改一处容易,改十处就要命。很自然的想法:把选择逻辑收拢到一个地方,客户端只告诉工厂"我要什么":public class NotificationFactory { public static Notification create(String type) { if ("email".equals(type)) { return new EmailNotification(); } else if ("sms".equals(type)) { return new SmsNotification(); } else { throw new IllegalArgumentException("未知的通知类型: " + type); } } }现在改默认通知方式?改工厂一处就行。问题暂时解决了。✅为什么需要工厂方法模式?好景不长,产品要加微信、钉钉、站内信……每新增一种,就得打开工厂往里塞else if:public static Notification create(String type) { if ("email".equals(type)) { return new EmailNotification(); } else if ("sms".equals(type)) { return new SmsNotification(); } else if ("wechat".equals(type)) { return new WechatNotification(); } else if ("dingtalk".equals(type)) { return new DingtalkNotification(); } else if ("inbox".equals(type)) { return new InboxNotification(); } else { throw new IllegalArgumentException("未知的通知类型: " + type); } }工厂从5行膨胀到几十行,每次改动都有引入 bug 的风险。问题出在哪?简单工厂把"判断创建哪种"和"执行创建"绑死在一个类里,新增产品必须改老代码,违反开闭原则。工厂方法模式的思路:不再用一个工厂搞定所有产品,而是定义抽象工厂接口,让每个具体工厂只负责一种产品:public interface NotificationFactory { Notification create(); } public class EmailNotificationFactory implements NotificationFactory { public Notification create() { return new EmailNotification(); } } public class SmsNotificationFactory implements NotificationFactory { public Notification create() { return new SmsNotification(); } }概念工厂方法模式(Factory Method)是一种创建型设计模式,核心思想是将对象的创建延迟到子类。父类定义创建对象的接口(工厂方法),由子类决定实例化哪个具体类。简单工厂 vs 工厂方法:简单工厂通过参数 +if-else集中创建所有产品,适合产品种类少且稳定的场景;工厂方法通过抽象工厂 + 具体工厂将创建职责分散,每个工厂只管一种产品,符合开闭原则——新增产品不改已有代码。简单工厂模式简单工厂不属于 GoF 23 种设计模式,更多的是一种编程习惯。它包含三个角色:

相关新闻

sql 内连接 和in 比较

sql 内连接 和in 比较

NNER JOIN 和 IN 在 SQL 中都能用于关联查询,但它们的适用场景和性能表现有显著差异。下面是详细的对比分析。📊 核心区别对比维度INNER JOININ本质表连接操作,合并两张表集合成员判断操作语法FROM A JOIN B ON A.id B.idWHERE A.id IN (SEL…

2026/7/31 7:19:20 阅读更多 →
51单片机驱动多色LED:从硬件原理到PWM调光实战

51单片机驱动多色LED:从硬件原理到PWM调光实战

1. 项目概述与核心价值上次我们聊了51单片机驱动单色LED的点亮、闪烁和流水灯,算是把最基础的IO口操作给摸透了。但现实中的项目,尤其是那些需要状态指示、氛围营造或者简单信息显示的场合,单色LED往往不够用。一个设备上,你可能需…

2026/7/31 7:19:20 阅读更多 →
SpringBoot微服务架构在高校电子图书馆系统中的应用实践

SpringBoot微服务架构在高校电子图书馆系统中的应用实践

1. 项目背景与核心价值高校图书馆正面临数字化转型的关键时期。传统纸质图书管理存在借阅效率低、资源利用率不均衡、读者行为分析困难等问题。我在参与某985高校智慧校园建设项目时,发现他们2019年的纸质图书平均周转率仅为0.8次/年,而电子资源访问量却…

2026/7/31 7:18:20 阅读更多 →

最新新闻

g2o框架在SLAM位姿图优化中的原理与实践

g2o框架在SLAM位姿图优化中的原理与实践

1. 项目概述:g2o与位姿图优化的核心价值 在机器人定位与建图(SLAM)领域,位姿图优化是解决传感器累积误差问题的关键技术。g2o(General Graph Optimization)作为开源的C框架,已经成为处理非线性优…

2026/7/31 7:59:33 阅读更多 →
科研数据获取效率翻倍:zenodo_get深度解析与实战手册

科研数据获取效率翻倍:zenodo_get深度解析与实战手册

科研数据获取效率翻倍:zenodo_get深度解析与实战手册 【免费下载链接】zenodo_get Zenodo_get - a downloader for Zenodo records 项目地址: https://gitcode.com/gh_mirrors/ze/zenodo_get 凌晨三点,实验室的灯光下,博士生小李正在下…

2026/7/31 7:59:33 阅读更多 →
Python猜拳游戏:从基础实现到AI博弈与GUI开发的编程实践

Python猜拳游戏:从基础实现到AI博弈与GUI开发的编程实践

1. 项目概述:从“石头剪刀布”到Python编程思维的跨越 “石头剪刀布”这个几乎人人都会的简单游戏,在编程学习者的世界里,却是一个绝佳的练手项目。它规则清晰、逻辑闭环,但实现路径却可以千变万化。今天,我们不只聊如…

2026/7/31 7:59:33 阅读更多 →
NCM音乐格式转换革命:解锁网易云音乐的终极自由

NCM音乐格式转换革命:解锁网易云音乐的终极自由

NCM音乐格式转换革命:解锁网易云音乐的终极自由 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 在数字音乐时代,格式限制往往成为音乐爱好者最大的困扰。你是否曾经为网易云音乐下载的NCM文件无法在其他设备播…

2026/7/31 7:59:33 阅读更多 →
什么是OA办公系统

什么是OA办公系统

不少企业老板常听闻OA,却始终不清楚其核心作用。OA的全称是办公自动化系统,通俗来讲,就是将企业传统线下跑腿、纸质签字的繁琐办公流程,全面迁移至线上,实现数字化、规范化办公的管理工具。传统线下办公模式存在诸多弊…

2026/7/31 7:59:33 阅读更多 →
Markdown编辑器XSS防御实战:从ByteMD源码看Web安全纵深防御

Markdown编辑器XSS防御实战:从ByteMD源码看Web安全纵深防御

1. 项目概述:为什么Markdown编辑器也需要安全机制? 如果你是一名前端开发者或者内容创作者,大概率用过不止一款Markdown编辑器。从VS Code的预览插件到各种在线笔记工具,Markdown以其简洁的语法和清晰的排版,几乎成了技…

2026/7/31 7:58:33 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻