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女侠将构建一个 "事件监听联盟" ,实现 "一对多"的自动通知系统

相关推荐
皮皮林5516 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河7 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程9 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅11 小时前
Java面向对象入门(类与对象,新手秒懂)
java
静水流深_沧海一粟12 小时前
04 | 别再写几十个参数的构造函数了——建造者模式
设计模式
StarkCoder12 小时前
从UIKit到SwiftUI的迁移感悟:数据驱动的革命
设计模式
初次攀爬者12 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺12 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart13 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot