当前位置: 首页 > news >正文

模版模式 设计模式


设计模式 总目录

https://preparedata.blog.csdn.net/article/details/134512591


文章目录

    • 设计模式 总目录
    • 一、案例
    • 二、抽象类模版 AbstractOrderTemplate(顶层的订单抽象类)
    • 三、执行模版的实现类
      • 3.1 默认执行模版 DefaultOrder
      • 3.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(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 {@Overridepublic void check(Map<String, Object> map) {}@Overridepublic void getGoods(Map<String, Object> map) {}@Overridepublic void deductStock(Map<String, Object> map) {}@Overridepublic void deductPoint(Map<String, Object> map) {}@Overridepublic void saveOrder(Map<String, Object> map) {}@Overridepublic 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 {@Overridepublic void check(Map<String, Object> map) {}@Overridepublic void getGoods(Map<String, Object> map) {}@Overridepublic void deductStock(Map<String, Object> map) {}@Overridepublic void deductPoint(Map<String, Object> map) {}@Overridepublic void saveOrder(Map<String, Object> map) {}@Overridepublic 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<>());}

http://www.lryc.cn/news/240410.html

相关文章:

  • MySQL锁机制
  • webpack loader
  • Java—学生信息管理系统(简单、详细)
  • Spring第一课,了解IDEA里面的文件,回顾Cookie和Session,获取Session,Cookie,Header的方式
  • AcWing113.特殊排序
  • 数据仓库岗面试
  • 企业建数仓的第一步是选择一个好用的ETL工具
  • 行情分析 - - 加密货币市场大盘走势(11.23)
  • 穿山甲SDK 集成·android接入广告·app流量变现
  • 深度学习模型训练计算量的估算
  • 【实验笔记】C语言实验——降价提醒机器人
  • YOLOv5分割训练,从数据集标注到训练一条龙解决
  • 再添千万级罚单,某银行年内罚款过亿!金融行业合规问题亟待解决
  • 配置Nginx服务器用于Web应用代理和SSL{仅配置文件}
  • 【广州华锐互动】VR溺水预防教育:在虚拟世界中学会自救!
  • Si(111)衬底上脉冲激光沉积AlN外延薄膜的界面反应控制及其机理
  • 基于Cortex®-M4F的TM4C123GH6NMRT7R 32位MCU,LM74900QRGERQ1、LM74930QRGERQ1汽车类理想二极管
  • 苹果企业签名失败常见的问题
  • Jtti:Android alertdialog嵌套出错怎么解决
  • 解锁word密码,忘记密码怎么办?
  • 同为科技(TOWE)桌面PDU插排:一款可以DIY定制的“超级插座”
  • 使用Java Servlet生成动态二维码
  • 【已解决】微信小程序腾讯地图的map清除markers,setData将marker置空后,安卓和ios还会显示上次的内容的问题所在以及解决办法
  • 弄懂Rust编程中的Trait
  • 关于登山扣亚马逊\SHEIN出口合规标准ASTM F1774 指南解析
  • 浅析ChatGPT中涉及到的几种技术点
  • Web实战:基于Django与Bootstrap的在线计算器
  • 曲率半径的推导
  • 0时区格林威治时间转换手机当地时间-Android
  • git-3