Java设计模式漫画英雄宇宙-工厂模式 —Factory博士的“超级英雄制造机”!

在Java城遭遇空前危机时,光靠Singleton侠一个人已经不够了。市民们需要:消防侠、闪电侠、盾甲侠、云原生侠......不同任务,需要不同英雄!

但问题来了:

"每次都要手动new一个英雄?代码里全是new FiremanHero()new CloudNativeHero()?太乱了!"

这时,一位神秘科学家登场------Factory博士

💬 "别再自己造英雄了!把需求告诉我,我来批量生产------而且保证类型正确、扩展无忧!"


🏭 一、简单工厂(Simple Factory)------ 英雄点餐机

市民对着机器喊:"我要消防侠!"

机器"哐当"一声,吐出一个 FiremanHero

java 复制代码
public class HeroFactory {
    public static Hero createHero(String type) {
        switch (type) {
            case "fire": return new FiremanHero();
            case "lightning": return new LightningHero();
            case "cloud": return new CloudNativeHero();
            default: throw new IllegalArgumentException("未知英雄类型!");
        }
    }
}

✅ 优点:使用简单,封装了创建逻辑。

❌ 缺点:每新增一个英雄,就要修改工厂代码!违反开闭原则!

漫画场景:Factory博士开着一个小摊,手写菜单,每次加新品都得重写黑板。

🏢 二、工厂方法模式(Factory Method)------ 英雄制造分部

为了解决扩展问题,Factory博士决定:建立连锁工厂

  • 消防局有自己的工厂 → 专门造消防侠
  • 闪电联盟有自己的工厂 → 专门造闪电侠
  • 云原生联盟也有自己的工厂 → 造云原生侠
java 复制代码
// 抽象工厂接口
public interface HeroFactory {
    Hero createHero();
}

// 消防英雄工厂
public class FiremanHeroFactory implements HeroFactory {
    public Hero createHero() {
        return new FiremanHero();
    }
}

// 使用
HeroFactory factory = new CloudNativeHeroFactory();
Hero hero = factory.createHero(); // 自动产出云原生侠!

✅ 优点:新增英雄?只要新建一个工厂类,不用改原有代码!

✅ 符合 开闭原则:对扩展开放,对修改关闭。

漫画场景:Factory博士在全国开加盟店,每个分部只干一件事,专业又高效!

🌐 三、抽象工厂模式(Abstract Factory)------ 英雄套装生产线

某天,反派"耦合魔王"来袭,需要的不只是单个英雄,而是一整套 "云原生战队"

  • 云原生侠(Hero)
  • 服务网格盾(Equipment)
  • Prometheus眼(Sensor)

Factory博士升级技术,推出 "战队生成器"

java 复制代码
// 抽象工厂:能生产一整套装备
public interface CloudNativeTeamFactory {
    Hero createHero();
    Equipment createEquipment();
    Sensor createSensor();
}

// 具体工厂:K8s战队工厂
public class KubernetesTeamFactory implements CloudNativeTeamFactory {
    public Hero createHero() { return new CloudNativeHero(); }
    public Equipment createEquipment() { return new IstioShield(); }
    public Sensor createSensor() { return new PrometheusEye(); }
}

✅ 适用于 产品族(Product Family) 场景:多个相关对象需要一起创建。

❌ 缺点:新增一个产品(比如加个"AI助手"),所有工厂都要改!

漫画场景:Factory博士启动"英雄+装备+宠物"三位一体生产线,一键出战队!

🎯 工厂模式三兄弟对比表

模式 核心思想 适用场景 扩展性
简单工厂 一个工厂造所有英雄 英雄种类少、不常变 ❌ 差
工厂方法 一个英雄一个工厂 英雄种类多、经常新增 ✅ 好
抽象工厂 一个工厂造一整套战队 多个相关对象需配套使用 ⚠️ 新增产品类型较难

💡 现实中的"英雄工厂"

  • Spring 的 BeanFactory → 工厂方法
  • JDBC 的 DriverManager → 简单工厂
  • GUI 库(如 Swing)创建按钮、文本框 → 抽象工厂思想

🦸‍♀️ 下一期预告:观察者模式 ------ Watcher女侠与"消息广播网"!

当Java城发生火灾、网络攻击、数据库崩溃......如何让所有关心的人立刻收到通知

Watcher女侠将构建一个 "事件监听联盟" ,实现 "一对多"的自动通知系统

相关推荐
廋到被风吹走4 小时前
【Spring 】Spring Security深度解析:过滤器链、认证授权架构与现代集成方案
java·spring·架构
蛐蛐蜉蝣耶4 小时前
Spring Boot实现DynamicMethodMatcherPointcut示例
java·spring boot·后端
予枫的编程笔记5 小时前
Elasticsearch聚合分析与大规模数据处理:解锁超越搜索的进阶能力
java·大数据·人工智能·分布式·后端·elasticsearch·全文检索
BD_Marathon5 小时前
PostMan简介
java
一勺菠萝丶5 小时前
宝塔 vs 1Panel 有什么区别?能不能同时安装?
java
码农小卡拉5 小时前
Springboot “钩子”:@PostConstruct注解
java·spring boot·后端·spring·spring cloud
毕设源码-郭学长5 小时前
【开题答辩全过程】以 快递仓库管理系统为例,包含答辩的问题和答案
java
帅次5 小时前
系统设计方法论全解:原则、模型与用户体验核心要义
设计模式·流程图·软件工程·软件构建·需求分析·设计规范·规格说明书
꧁Q༒ོγ꧂5 小时前
算法详解(二)--算法思想基础
java·数据结构·算法
次元工程师!5 小时前
Sa-Token完成路由鉴权
java·服务器·前端