双语网站系统,影视网站cpa 如何做,邮件表头图片网站,新乡住房与城乡建设厅网站设计模式 总目录
https://preparedata.blog.csdn.net/article/details/134512591 文章目录 设计模式 总目录一、案例二、抽象类模版 AbstractOrderTemplate#xff08;顶层的订单抽象类#xff09;三、执行模版的实现类3.1 默认执行模版 DefaultOrder3.2 其他执行模版 Simlp…
设计模式 总目录
https://preparedata.blog.csdn.net/article/details/134512591 文章目录 设计模式 总目录一、案例二、抽象类模版 AbstractOrderTemplate顶层的订单抽象类三、执行模版的实现类3.1 默认执行模版 DefaultOrder3.2 其他执行模版 SimlpeOrder 四、调用 一、案例
在的下单业务中可以将下单逻辑拆分可能存在检验参数、获取商品、 扣减库存、核销优惠券、抵扣积分保存订单等等。
应为业务的不同可能下单处理节点不同扣减库存、核销优惠券、抵扣积分可能需要可能不需要也可能相互组合。这是我们在单一下单接口中逻辑就比较复杂需要各种判断各种兼容后续代码逻辑很难清晰
这是我们可以借助模版模式将下单逻辑各个节点拆分将具体各节点的执行进行模版组合一个模版对应一套逻辑, 具体的下单逻辑派发给模版去执行。
1.定义 抽象类 AbstractOrderTemplate 定义声明拆分下单逻辑 声明模版执行 通过业务类型来获取模版
2.定义 实现类 DefaultOrder 默认的执行模版、 SimlpeOrder 其他的执行模版继承AbstractOrderTemplate 实现抽象类AbstractOrderTemplate的模版执行。
通过模版可以自由区组合业务节点, 打包成一个执行整体。 二、抽象类模版 AbstractOrderTemplate顶层的订单抽象类
package com.pd.shopping.order.designptern.template;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;import java.util.Map;/*** author hll*/
Slf4j
Component
public abstract class AbstractOrderTemplate {public static AbstractOrderTemplate getInstance(String orderType) {switch (orderType){case Simlpe://可以利用一些获取Bean的工具获取 避免new//SpringApplicationUtil.getBean(SimlpeOrder.class);return new SimlpeOrder();case Default:return new DefaultOrder();default:return new DefaultOrder();}}/*** 检查参数* param map*/public abstract void check(MapString, Object map);/*** 获取商品* param map*/public abstract void getGoods(MapString, Object map);/*** 扣减库存* param map*/public abstract void deductStock(MapString,Object map);/*** 扣减积分* param map*/public abstract void deductPoint(MapString,Object map);/*** 保存订单* param map*/public abstract void saveOrder(MapString,Object map);/*** 执行模版* param map*/public abstract void executeTemplate(MapString,Object map);
} 三、执行模版的实现类
3.1 默认执行模版 DefaultOrder
package com.pd.shopping.order.designptern.template;import java.util.Map;public class DefaultOrder extends AbstractOrderTemplate {Overridepublic void check(MapString, Object map) {}Overridepublic void getGoods(MapString, Object map) {}Overridepublic void deductStock(MapString, Object map) {}Overridepublic void deductPoint(MapString, Object map) {}Overridepublic void saveOrder(MapString, Object map) {}Overridepublic void executeTemplate(MapString, Object map) {//检查参数check(map);//获取商品getGoods(map);//扣减库存deductStock(map);//扣减积分deductPoint(map);//保存订单saveOrder(map);}
}
3.2 其他执行模版 SimlpeOrder
package com.pd.shopping.order.designptern.template;import java.util.Map;public class SimlpeOrder extends AbstractOrderTemplate {Overridepublic void check(MapString, Object map) {}Overridepublic void getGoods(MapString, Object map) {}Overridepublic void deductStock(MapString, Object map) {}Overridepublic void deductPoint(MapString, Object map) {}Overridepublic void saveOrder(MapString, Object map) {}Overridepublic void executeTemplate(MapString, Object map) {//检查参数check(map);//获取商品getGoods(map);//保存订单saveOrder(map);}
} 四、调用 GetMapping(/templateOrder)public void templateOrder() {AbstractOrderTemplate.getInstance(Simlpe).executeTemplate(new HashMap());AbstractOrderTemplate.getInstance(Default).executeTemplate(new HashMap());}