简单工厂模式和策略模式的区别

在实际开发中,简单工厂模式和策略模式经常被拿来比较,因为它们在某些场景下长得确实很像(比如都会用到 switch 或 if-else 来做选择)。

,我们只要记住一个核心口诀:工厂模式关注的是"生(创建对象)",策略模式关注的是"干(执行算法)"。

我们还是用生活中的例子来对比拆解。


1. 什么是简单工厂模式?

生活场景:奶茶店的自动点单机

你想喝一杯奶茶。你不需要自己去准备茶叶、煮珍珠、加牛奶(这就相当于在代码里 new 一个复杂的对象)。你只需要在点单机上选择"珍珠奶茶",点单机(工厂)内部就会替你把这杯奶茶做出来,然后递给你。

简单工厂模式的核心思想: 专门定义一个类(工厂类),用来负责创建其他类的实例。调用者只需要告诉工厂"我想要什么",工厂就把做好的对象返回给调用者。

简单的伪代码长这样:

Java

复制代码
public class CoffeeFactory {
    // 这就是一个简单工厂方法
    public static Coffee createCoffee(String type) {
        if ("LATTE".equals(type)) {
            return new Latte();      // 帮你 new 好拿铁
        } else if ("AMERICANO".equals(type)) {
            return new Americano();  // 帮你 new 好美式
        }
        return null;
    }
}

// 客户端调用:拿来即用,不需要知道美式是怎么 new 出来的
Coffee myCoffee = CoffeeFactory.createCoffee("AMERICANO");

2. 工厂模式 VS 策略模式 的核心区别

如果你去北京出差:

  • 简单工厂模式: 负责给你**"造"**出一架飞机、一辆高铁或一辆汽车(交给你一个交通工具对象)。
  • 策略模式: 负责按你的选择**"执行"**去北京的过程,计算出你需要花多少时间、多少钱(执行具体的算法/行为)。

我们用一张表格来直观对比:

维度 简单工厂模式 (Simple Factory) 策略模式 (Strategy)
归属类别 创建型模式 (Creational) 行为型模式 (Behavioral)
核心目的 封装对象创建的过程。 封装算法执行的过程。
最终结果 返回一个实例化好的对象。 返回一个计算结果或执行一段动作。
调用者的诉求 "工厂,给我造一个A对象出来。" "策略,帮我用A方式把这事儿办了。"

3. 当两者结合:王炸组合

在真实的商业项目(比如电商系统的打折计算、支付系统的渠道选择)中,我们很少孤立地使用它们。最经典的套路是:用"工厂模式"来创建"策略对象"。

想象一下你的 PDF 导出系统,用户在前端传了一个参数 style="CENTER",后端要怎么处理?

第一步:用工厂模式获取策略(代替长串的 if-else)

Java

复制代码
// 这是一个策略工厂,负责根据名字,把具体的"策略"拿出来给你
public class PdfStyleStrategyFactory {
    public static PdfPageNumberStyle getStrategy(String styleName) {
        // 利用枚举自带的 valueOf 充当工厂的获取逻辑
        return PdfPageNumberStyle.valueOf(styleName); 
    }
}

第二步:用策略模式执行计算

Java

复制代码
// 客户端代码:
// 1. 找工厂要策略 (生)
PdfPageNumberStyle strategy = PdfStyleStrategyFactory.getStrategy("CENTER");

// 2. 让策略干活 (干)
PageNumberPosition position = strategy.getPosition(pageNum, width, txtWidth);

总结

  • 工厂模式 是找个代工厂帮你造零件。
  • 策略模式 是找个锦囊妙计帮你出主意。
相关推荐
钱栈up2 天前
从 macOS 切回 Windows,我用 5 个免费工具把 80% 操作习惯搬了回来
windows·macos·策略模式
kunicoding4 天前
C++ 策略模式实战:写一个可以“一键换输出“的日志系统
开发语言·c++·策略模式
峥嵘life5 天前
Android16 开机后立即打开相机闪退问题分析与解决总结
android·开发语言·数码相机·策略模式
智慧城市20306 天前
关键供应商连续交付不合格批次,说明质量风险可能持续存在。企业需要建立“批次隔离、加严检验、驻厂遏制、复检放行、供应商升级”的处置闭环,同时统筹保供。
数据分析·策略模式·战略咨询·流程管理
happy_baymax7 天前
Dell G3 3590 黑苹果实战:OpenCore 1.0.8 + NullMoth 驱动让 GTX 1660 跑起 Metal
策略模式
遇码7 天前
macOS 触摸板捏合在 GPUI 里无响应:vendor 打补丁,把手势合成为 cmd+滚轮事件
rust·图形渲染·策略模式·桌面应用·gpui
mmsx8 天前
Android 架构分层:MVVM 与 MVP 共存,网络层怎么切
android·策略模式·mvvm·mvp
博风8 天前
7、设计模式应用举例:策略模式:加密、解密文件
设计模式·策略模式
mmsx8 天前
Android 本地优先的三级语义理解降级链
android·数码相机·策略模式
早点睡觉好了8 天前
LangChain 源码入门 02:消息、ChatPromptTemplate 与 Chat Model 调用链
ai·langchain·策略模式