工厂模式+策略模式实践

工厂模式+策略模式实践

  1. 业务需求:根据传入的订单信息,不同类型的产品分别走不同的处理方式。
  2. 业务流程工厂模式+策略模式实践
    文章图片
  3. 技术设计:使用工厂模式+策略模式进行业务的处理工厂模式+策略模式实践
    文章图片
  4. 代码实现
  5. 测试调用
public class TestService{public static void main(String[] args) { //···处理前 //构造订单信息 ProductOrderInfo productOrderInfo = new ProductOrderInfo(); //根据产品类型在产品策略工厂获取策略 ProductStrategy productStrategy = ProductStrategyFactory.getProductStrategy(productOrderInfo.getProductType); //通过产品策略构造产品处理器对象 ProductHandler productHandler = new ProductHandler(productStrategy); //执行处理操作 productHandler.handler(productOrderInfo); //···处理后 } }

  • 产品订单信息
public class ProductOrderInfo {//产品类型 private ProductType productType; ······ }

  • 产品策略工厂
@Component public class ProductStrategyFactory implements InitializingBean { @Autowired private List productStrategies; private static Map【工厂模式+策略模式实践】 productStrategyMap; @Override //初始化bean的时候执行,将策略存入map当中 public void afterPropertiesSet() throws Exception { productStrategyMap = productStrategies.stream().collect(Collectors .toMap(ProductStrategy::getProductType, Function.identity())); }//根据产品类型获取对应的策略 public static ProductStrategy getProductStrategy(ProductType productType) { if (productType == null ) { throw new Exception("productType不能为空!"); } return productStrategyMap.get(productType); } }

  • 初始化Bean
public interface InitializingBean {//初始化bean的时候执行 void afterPropertiesSet() throws Exception; }

  • 产品策略接口
public interface ProductStrategy {/** * 获取产品类型 * @return 产品类型 */ ProductType getProductType(); /** * 处理订单信息 * @param productOrderInfo 订单信息 * @return 处理结果 */ boolean processProduct(ProductOrderInfo productOrderInfo);

  • Alpha产品策略
@Component public class AlphaProductStrategy implements ProductStrategy {@Override public ProductType getProductType() { return ProductType.ALPHA; }@Override public boolean processProduct(ProductOrderInfo productOrderInfo) { //具体处理逻辑··· } }

  • Beta产品策略
@Component public class BetaProductStrategy implements ProductStrategy {@Override public ProductType getProductType() { return ProductType.BETA; }@Override public boolean processProduct(ProductOrderInfo productOrderInfo) { //具体处理逻辑··· } }

  • Gamma产品策略
@Component public class GammaProductStrategy implements ProductStrategy {@Override public ProductType getProductType() { return ProductType.GAMMA; }@Override public boolean processProduct(ProductOrderInfo productOrderInfo) { //具体处理逻辑··· } }

  • 产品类型
@Getter public enum ProductType { /** * 产品类型1 */ ALPHA(0, "α"), /** * 产品类型2 */ BETA(1, "β"), /** * 产品类型3 */ GAMMA(2, "γ"); private Integer code; private String desc;

  • 产品订单处理器
public class ProductHandler{//产品策略 private ProductStrategy productStrategy; public ProductHandler(ProductStrategy productStrategy){ this.productStrategy = productStrategy; }//处理方法 public Boolean handler(ProductOrderInfo productOrderInfo) { //···处理前 boolean result = productStrategy.processProduct(productOrderInfo); //···处理后 } }

    推荐阅读