本文介绍: **case “Simlpe” : //可以利用一些获取Bean的工具获取, 避免new //SpringApplicationUtil.getBean(SimlpeOrder.class);} } /*** 检查参数/*** 获取商品/*** 扣减库存/*** 扣减积分/*** 保存订单/*** 执行模版/**
设计模式 总目录
https://preparedata.blog.csdn.net/article/details/134512591
一、案例
在的下单业务中,可以将下单逻辑拆分,可能存在检验参数、获取商品、 扣减库存、核销优惠券、抵扣积分,保存订单
等等。
应为业务的不同,可能下单处理节点不同(扣减库存、核销优惠券、抵扣积分,可能需要,可能不需要,也可能相互组合)。这是我们在单一下单接口中,逻辑就比较复杂,需要各种判断,各种兼容,后续代码逻辑很难清晰
这是我们可以借助模版模式,将下单逻辑,各个节点拆分,将具体各节点的执行进行模版组合,一个模版对应一套逻辑, 具体的下单逻辑,派发给模版去执行。
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(Map<String, Object> map);
/**
* 获取商品
* @param map
*/
public abstract void getGoods(Map<String, Object> map);
/**
* 扣减库存
* @param map
*/
public abstract void deductStock(Map<String,Object> map);
/**
* 扣减积分
* @param map
*/
public abstract void deductPoint(Map<String,Object> map);
/**
* 保存订单
* @param map
*/
public abstract void saveOrder(Map<String,Object> map);
/**
* 执行模版
* @param map
*/
public abstract void executeTemplate(Map<String,Object> map);
}
三、执行模版的实现类
3.1 默认执行模版 DefaultOrder
package com.pd.shopping.order.designptern.template;
import java.util.Map;
public class DefaultOrder extends AbstractOrderTemplate {
@Override
public void check(Map<String, Object> map) {
}
@Override
public void getGoods(Map<String, Object> map) {
}
@Override
public void deductStock(Map<String, Object> map) {
}
@Override
public void deductPoint(Map<String, Object> map) {
}
@Override
public void saveOrder(Map<String, Object> map) {
}
@Override
public void executeTemplate(Map<String, 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 {
@Override
public void check(Map<String, Object> map) {
}
@Override
public void getGoods(Map<String, Object> map) {
}
@Override
public void deductStock(Map<String, Object> map) {
}
@Override
public void deductPoint(Map<String, Object> map) {
}
@Override
public void saveOrder(Map<String, Object> map) {
}
@Override
public void executeTemplate(Map<String, 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<>());
}
原文地址:https://blog.csdn.net/sinat_16998945/article/details/134551660
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_13269.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。