You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请问下述Java代码属于工厂模式还是策略模式?或是两者兼具?

代码模式分析:策略模式为主,兼具策略选择逻辑

先明确两个模式的核心差异:

  • 策略模式:核心是封装不同的业务行为(算法),运行时根据条件选择对应的行为执行,重点在行为的切换与执行。
  • 工厂模式:核心是封装对象的创建逻辑,根据条件生成不同的实例,重点在对象的创建与提供。

回到你的代码:

  1. 策略模式的核心特征完全具备:

    • ResultProvider接口定义了统一的行为规范(search方法),Test1ResultProvider和Test2ResultProvider是两个不同的策略实现,各自对应不同的业务场景(通过getType区分)。
    • ResultService的核心逻辑是根据searchOption的类型,找到对应的策略实例,然后委托它执行search行为——这完全符合策略模式「选择策略并执行其行为」的核心。
  2. 为什么不是单纯的工厂模式:
    工厂模式的关键是创建对象,但你的代码里Test1/2ResultProvider是通过Spring的@Component注解初始化的,ResultService只是从已有的实例列表中筛选,并没有任何对象创建的逻辑。它没有承担「工厂」的核心职责——创建实例。

  3. 所谓的「兼具」是怎么回事:
    ResultService里的筛选逻辑确实有点像工厂的「实例选择」逻辑,但这只是策略模式中「选择合适策略」的必要环节,不是工厂模式的核心。策略模式本身就需要一个「策略选择器」来决定用哪个策略,这里的ResultService就承担了这个选择器的角色。

总结:你的代码本质是策略模式的典型应用,只是在策略选择环节用到了类似工厂的筛选逻辑,但核心目的是切换不同的业务行为,而非创建对象。

内容的提问来源于stack exchange,提问作者larn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 15:00:01