package com.oying.modules.pc.product.service.impl; import com.oying.modules.pc.product.domain.dto.ProductCreateRequest; import com.oying.modules.pc.product.domain.enums.ProductCreationType; import com.oying.modules.pc.product.service.ProductCreationStrategy; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; @Component public class ProductCreationContext { private final Map strategies; // Spring会自动注入所有ProductCreationStrategy的实现 public ProductCreationContext(List strategyList) { this.strategies = strategyList.stream() .collect(Collectors.toMap( ProductCreationStrategy::getType, Function.identity() )); } @PostConstruct public void validateStrategies() { if (strategies.isEmpty()) { throw new IllegalStateException("未配置任何商品创建策略,应用无法正常启动"); } } public void createProduct(ProductCreateRequest request, ProductCreationType type) { ProductCreationStrategy strategy = strategies.get(type); if (strategy == null) { throw new IllegalArgumentException("不支持的创建类型或参数类型不匹配"); } strategy.create(request); // 使用反射调用,或者更好的方式... // invokeStrategy(strategy, request); } /* private void invokeStrategy(ProductCreationStrategy strategy, ProductCreationRequest request) { try { Method createMethod = strategy.getClass().getMethod("create", request.getClass()); createMethod.invoke(strategy, request); } catch (Exception e) { throw new RuntimeException("执行商品创建策略失败", e); } }*/ }