客户做网站需要提供什么,小波app推广网,互联网站点,新乡优化【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等
目录
【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等 优势 适用场景
项目结构
关键代码 优势 消除 switch#xff1a;将分支逻辑分散到独立的策略类中。 开闭原则#xff1a;新增类型只需添加新的 TypeHa…【设计模式】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 MapString, TypeHandler handlerMap;Autowiredpublic TypeHandlerFactory(ListTypeHandler 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();}
}