暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

工厂设计模式:从“手工作坊”到“智能流水线”的进化

一、为什么人类需要“工厂”?——从原始社会到工业革命

想象一个没有工厂的世界:
每个工匠都自己炼铁、锻造零件、组装马车。一旦客户需要“蒸汽机车”,所有工匠都要重新学习新技术,旧工具全部废弃,整个行业陷入混乱。

软件开发中的“手工作坊时代”

    // 客户端直接造轮子(对象)
    UserService userService = new UserServiceImpl(); 
    Payment payment = new AlipayPayment();

    当需要切换数据库(MySQL → MongoDB)或支付方式(支付宝 → 微信),必须像考古一样翻遍所有代码修改new
    语句——这就是耦合的灾难


    二、工厂模式的“第一性原理”:隔离混沌,创造秩序

    核心思想 = 宇宙大爆炸的“奇点控制”
    把对象创建的能量封印在工厂类这个“奇点”中,让变化在此处爆发,而不影响整个宇宙(业务逻辑)。

    哲学隐喻

    • 控制反转:不是“我需要什么就自己造”,而是“告诉工厂我需要什么”

    • 信息屏蔽:如同餐厅后厨对顾客不可见,只关注菜单(接口)

    • 熵减工具:在软件不断腐化的过程中维持秩序


    三、没有工厂模式的世界会怎样?——一个程序员的地狱周记

    Day 1:老板要求把日志从文件输出改为Kafka发送
    → 全局搜索new FileLogger()
    ,修改127处

    Day 3:测试发现某些场景需要动态切换日志方式
    → 增加if-else
    分支,代码变成意大利面条

    Day 5:客户要求同时支持JSON和XML格式日志
    → 创建逻辑复杂度爆炸,加班到凌晨3点

    Day 7:系统因对象创建顺序错误崩溃
    → 在会议室被批斗:“这就是不用设计模式的代价!”


    四、工厂模式的“三阶进化论”

    1. 简单工厂(石器时代)

        // 集中营式生产:一个工厂类包揽所有
        public class WeaponFactory {
            public static Weapon create(String type) {
                if ("sword".equals(type)) return new IronSword();
                if ("gun".equals(type)) return new FlintlockPistol();
                throw new IllegalArgumentException("未知武器");
            }
        }
      • 痛点:新增“激光剑”需要修改工厂类——违反开闭原则

      • 工厂方法(工业革命)

          // 流水线专业化:每个产品有专属车间
          interface WeaponFactory {
              Weapon create();
          }
          class LightsaberFactory implements WeaponFactory {
              public Weapon create() { return new Lightsaber(); }
          }
        • 飞跃:想要星际武器?直接新建PlasmaRifleFactory
          即可

        • 抽象工厂(太空时代)

            // 生态级制造:生产相互关联的产品族
            interface StarshipFactory {
                Engine createEngine();
                WeaponSystem createWeapon();
            }
            class ImperialFactory implements StarshipFactory {
                public Engine createEngine() { return new Hyperdrive(); }
                public WeaponSystem createWeapon() { return new DeathRay(); }
            }


          1. 质变:保证歼星舰引擎与武器系统的兼容性


          五、工厂模式的“超能力”解密

          1. 时空折叠术
            把分布在代码各处的new
            折叠到工厂类,就像把散落的星星聚集成星系

          2. 变形盔甲
            客户端代码穿戴抽象接口的盔甲,具体产品如流水的兵:

              // 今天用MySQL,明天换成PostgreSQL?只需换工厂!
              DatabaseFactory factory = new PostgreSQLFactory();
              Connection conn = factory.createConnection();
            • 预言家之眼
              通过配置工厂预知未来需求:

              <!-- Spring的终极工厂魔法 -->
              <bean id="userService" class="com.example.AdvancedUserServiceFactory">
                  <property name="strategy" value="blockchain"/>
              </bean>

              下期预告:

              《当工厂遇见宇宙法则:如何用抽象工厂组装可编程物质?》

              • 探秘特斯拉超级工厂的软件映射

              • 从DI容器到量子纠缠:对象创建的维度跃迁

              • 反模式警示:过度工厂化如何导致“银河帝国衰亡”


              文章转载自让天下没有难学的编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论