请问下述Java代码属于工厂模式还是策略模式?或是两者兼具?
代码模式分析:策略模式为主,兼具策略选择逻辑
先明确两个模式的核心差异:
- 策略模式:核心是封装不同的业务行为(算法),运行时根据条件选择对应的行为执行,重点在行为的切换与执行。
- 工厂模式:核心是封装对象的创建逻辑,根据条件生成不同的实例,重点在对象的创建与提供。
回到你的代码:
策略模式的核心特征完全具备:
ResultProvider接口定义了统一的行为规范(search方法),Test1ResultProvider和Test2ResultProvider是两个不同的策略实现,各自对应不同的业务场景(通过getType区分)。ResultService的核心逻辑是根据searchOption的类型,找到对应的策略实例,然后委托它执行search行为——这完全符合策略模式「选择策略并执行其行为」的核心。
为什么不是单纯的工厂模式:
工厂模式的关键是创建对象,但你的代码里Test1/2ResultProvider是通过Spring的@Component注解初始化的,ResultService只是从已有的实例列表中筛选,并没有任何对象创建的逻辑。它没有承担「工厂」的核心职责——创建实例。所谓的「兼具」是怎么回事:
ResultService里的筛选逻辑确实有点像工厂的「实例选择」逻辑,但这只是策略模式中「选择合适策略」的必要环节,不是工厂模式的核心。策略模式本身就需要一个「策略选择器」来决定用哪个策略,这里的ResultService就承担了这个选择器的角色。
总结:你的代码本质是策略模式的典型应用,只是在策略选择环节用到了类似工厂的筛选逻辑,但核心目的是切换不同的业务行为,而非创建对象。
内容的提问来源于stack exchange,提问作者larn
相关产品推荐
相关产品推荐

