工厂模式+策略模式实践

2 篇文章 0 订阅
1 篇文章 0 订阅

工厂模式+策略模式实践

  1. 业务需求:根据传入的订单信息,不同类型的产品分别走不同的处理方式。
  2. 业务流程在这里插入图片描述
  3. 技术设计:使用工厂模式+策略模式进行业务的处理在这里插入图片描述
  4. 代码实现
  • 测试调用
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<ProductStrategy> productStrategies;

    private static Map<ProductType, ProductStrategy> 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);
				//···处理后
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值