欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等

【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等

2025/9/19 7:59:07 来源:https://blog.csdn.net/G971005287W/article/details/145302038  浏览:    关键词:【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等

【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等

目录

【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等

 优势

 适用场景

项目结构

关键代码


 优势

  • 消除 switch:将分支逻辑分散到独立的策略类中。

  • 开闭原则:新增类型只需添加新的 TypeHandler 实现类,无需修改已有代码。

  • 依赖注入:由 Spring 管理 Bean 生命周期,天然支持单例、原型等作用域。

  • 易于测试:每个策略类可单独测试,工厂类可通过 Mock 注入。

 适用场景

  • 类型数量庞大(如上百种)。

  • 不同类型的处理逻辑独立且可能频繁变更。

  • 需要动态扩展支持新类型。

项目结构
src/main/java
├── com.example.demo
│   ├── handler
│   │   ├── TypeHandler.java
│   │   ├── TypeAHandler.java
│   │   ├── TypeBHandler.java
│   │   └── DefaultHandler.java
│   ├── factory
│   │   └── TypeHandlerFactory.java
│   └── service
│       └── BusinessService.java

关键代码
// TypeHandler.java
public interface TypeHandler {void handle();String getType();
}// TypeAHandler.java
@Component
public class TypeAHandler implements TypeHandler {@Overridepublic void handle() { System.out.println("处理类型A"); }@Overridepublic String getType() { return "A"; }
}// TypeHandlerFactory.java
@Component
public class TypeHandlerFactory {private final Map<String, TypeHandler> handlerMap;@Autowiredpublic TypeHandlerFactory(List<TypeHandler> handlers) {handlerMap = handlers.stream().collect(Collectors.toMap(TypeHandler::getType, handler -> handler));}public TypeHandler getHandler(String type) {return Optional.ofNullable(handlerMap.get(type)).orElseThrow(() -> new IllegalArgumentException("未知类型: " + type));}
}// BusinessService.java
@Service
public class BusinessService {private final TypeHandlerFactory handlerFactory;@Autowiredpublic BusinessService(TypeHandlerFactory handlerFactory) {this.handlerFactory = handlerFactory;}public void process(String type) {handlerFactory.getHandler(type).handle();}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词