工厂模式+策略模式实现业务需求:根据传入的订单信息,对不同类型的产品进行不同的处理。业务流程技术设计:采用工厂模式+策略模式实现业务处理代码实现测试调用publicclassTestService{publicstaticvoidmain(String[]args){//···处理前//构造订单信息ProductOrderInfoproductOrderInfo=new产品订单信息();//根据产品类型,获取产品策略工厂中的策略ProductStrategyproductStrategy=ProductStrategyFactory.getProductStrategy(productOrderInfo.getProductType);//通过产品策略构造产品处理器对象ProductHandlerproductHandler=newProductHandler(productStrategy);//执行处理操作productHandler.handler(productOrderInfo);//···处理后}}商品订单信息privatestaticMap亲管道策略图;@Override//bean初始化时执行,将策略存入mappublicvoidafterPropertiesSet()throwsException{productStrategyMap=productStrategies.stream().collect(Collectors.toMap(ProductStrategy::getProductType,Function.identity()));}//根据产品类型获取对应策略publicstaticProductStrategygetProductStrategy(ProductTypeproductType){if(productType==null){thrownewException("productTypecannotbeempty!");}返回productStrategyMap.get(productType);}}初始化BeanpublicinterfaceInitializingBean{//执行voidafterPropertiesSet()throwsExceptionwheninitializingbean;}ProductstrategyinterfacepublicinterfaceProductStrategy{/***获取产品类型*@returnproducttype*/ProductTypegetProductType();/***处理订单信息*@paramproductOrderInfo订单信息*@return处理结果*/booleanprocessProduct(ProductOrderInfoproductOrderInfo);Alpha产品策略@Componentpublic类AlphaProductStrategy实现ProductStrategy{@OverridepublicProductTypegetProductType(){returnProductType.ALPHA;}@OverridepublicbooleanprocessProduct(ProductOrderInfoproductOrderInfo){//具体处理逻辑}}Beta产品策略@Componentpublicate??gProductStrategProduct{@OverridepublicProductTypegetProductType(){returnProductType.BETA;}@OverridepublicbooleanprocessProduct(ProductOrderInfoproductOrderInfo){//具体处理逻辑...}}Gamma产品策略@ComponentpublicclassGammaProductStrategyimplementsProductStrategy{@OverridePublic){returnProductType.GAMMA;}@OverridepublicbooleanprocessProduct(ProductOrderInfoproductOrderInfo){//具体处理逻辑...}}产品类型@GetterpublicenumProductType{/***产品类型1*/ALPHA(0,"α"),/***产品类型2*/BETA(1,"β"),/***产品类别类型3*/GAMMA(2,"γ");私有整数代码;私有字符串描述;产品订单处理器publicclassProductHandler{//产品策略privateProductStrategyproductStrategy;publicProductHandler(ProductStrategyproductStrategy){this.productStrategy=productStrategy;}//处理方法publicBooleanhandler(ProductOrderInfoproductOrderInfo){//···处理布尔值之前result=productStrategy.processProduct(productOrderInfo);//···处理后}}