一:抽象使用优惠券业务逻辑接口

import java.math.BigDecimal;
import java.util.List;/***@ClassName UseCouponBase*@Description TODO  抽象使用优惠券业务逻辑接口*@Author Ni Klaus*@Date 2019/9/9 0009 下午 16:58*@Version 1.0*/
interface UseCouponBase{// 所有处理逻辑的方法void doSomething(List couponList,UseCouponBase useCouponBase, BigDecimal discounts);
}

二:使用优惠券路由(控制操作)

import lombok.Data;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;/*** @Author Ni Klaus* @Description //TODO 使用优惠券路由* @Date 上午 11:15 2019/9/17 0017* @Param * @return **/
@Data
public class UseCouponChain implements UseCouponBase{// 所有 case 列表private List<UseCouponBase> mCaseList = new ArrayList<>();// 索引,用于遍历所有 case 列表private int index = 0;// 添加 casepublic UseCouponChain addBaseCase(UseCouponBase base) {mCaseList.add(base);return this;}@Overridepublic void doSomething(List couponList,UseCouponBase useCouponBase,BigDecimal discounts) {//所有遍历完了,直接返回if(index == mCaseList.size()){return;}//获取当前 caseUseCouponBase currentCase = mCaseList.get(index);//修改索引值,以便下次回调获取下个节点,达到遍历效果index++;//调用 当前 case 处理方法currentCase.doSomething(couponList,useCouponBase,discounts);}
}

三:定义不同优惠券的业务逻辑处理执行器

满减券:

import java.math.BigDecimal;
import java.util.List;/***@ClassName CheckDyCoupon*@Description TODO 满减券 执行器*@Author Ni Klaus*@Date 2019/9/9 0009 下午 17:20*@Version 1.0*/
public class UseMjCoupon implements UseCouponBase{@Overridepublic void doSomething(List couponList, UseCouponBase useCouponBase, BigDecimal discounts) {System.out.println("使用满减券逻辑处理");//使用满减券逻辑处理(怎么使用的代码此处我就省略了,具体业务逻辑具体实现就行)//交给下一个处理useCouponBase.doSomething(couponList,useCouponBase,discounts);}
}

折扣券:

import java.math.BigDecimal;
import java.util.List;/*** @Author Ni Klaus* @Description //TODO 折扣券 执行器* @Date 下午 15:21 2019/9/16 0016* @Param* @return **/
public class UseZkCoupon implements UseCouponBase{@Overridepublic void doSomething(List couponList, UseCouponBase useCouponBase, BigDecimal discounts){System.out.println("使用折扣券逻辑处理");//使用折扣券逻辑处理(怎么使用的代码此处我就省略了,具体业务逻辑具体实现就行)//交给下一个执行器处理useCouponBase.doSomething(couponList,useCouponBase,discounts);}
}

如果还要其它类型的优惠券只需要增加执行器就行,拓展性比较强。

四:测试

import com.sgl.designpattern.chain_of_responsibility.module.UseCouponChain;
import com.sgl.designpattern.chain_of_responsibility.module.UseMjCoupon;
import com.sgl.designpattern.chain_of_responsibility.module.UseZkCoupon;
import org.springframework.stereotype.Controller;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;/***@ClassName UseCoupon*@Description TODO  消费优惠券  -------  责任链模式*@Author Ni Klaus*@Date 2019/9/24 0024 下午 15:02*@Version 1.0*/
@Controller
public class UseCoupon {public static void main(String[] args) {//新建一个各类优惠券处理路由UseCouponChain useCouponChain = new UseCouponChain();//需要处理哪些优惠券按顺序添加进路由就行useCouponChain.addBaseCase(new UseMjCoupon()).addBaseCase(new UseZkCoupon());/*这里couponList 是形参,具体业务中可以是用户的可用优惠券列表,可以传入执行器中进行业务逻辑处理*/List couponList = new ArrayList<>();//执行业务逻辑处理useCouponChain.doSomething(couponList,useCouponChain,new BigDecimal(0));}}

测试结果:

五:源代码下载:https://github.com/Hak-L/designpattern

优惠券使用---责任链模式相关推荐

  1. 责任链模式在复杂数据处理场景中的实战

    相信大家在日常的开发中都遇到过复杂数据处理和复杂数据校验的场景,本文从一线开发者的角度,分享了责任链模式在这种复杂数据处理场景下的实战案例,此外,作者在普通责任链模式的基础上进行了升级改造,可以适配更 ...

  2. Chain of Responsibility 责任链模式 MD

    责任链模式 简介 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链,请求在这个链上[传递],直到链上的某一个对象决定处理此请求.发出这个请求的客户 ...

  3. Java 责任链模式

    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为 ...

  4. 设计模式之五 责任链模式(Chain of Responsibility)

    2019独角兽企业重金招聘Python工程师标准>>> 一. 场景 相信我们都有过这样的经历: 我们去职能部门办理一个事情,先去了A部门,到了地方被告知这件事情由B部门处理: 当我们 ...

  5. 一起学设计模式 - 责任链模式

    责任链模式(ChainOfResponsibilityPattern)属于 行为型模式的一种,将请求沿着一条链传递,直到该链上的某个对象处理它为止. 概述 定义如下:一个请求有多个对象来处理,这些对象 ...

  6. 采购申请的处理流程 --- 责任链模式

    前情提要 上集讲到小光梳理了公司的组织架构, 利用组合模式建立起了一个可扩展变化的多层的组织架构体系. 更清晰地明确了公司各个层级, 各个部门的职责. 大家明确职责, 通力合作, 让"小光热 ...

  7. 折腾Java设计模式之责任链模式

    责任链模式 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计 ...

  8. 设计模式(9)-责任链模式详解(易懂)

    责任链模式的定义 责任链模式是一种设计模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道 ...

  9. 最近学习了责任链模式

    2019独角兽企业重金招聘Python工程师标准>>> 前言 来菜鸟这个大家庭10个月了,总得来说比较融入了环境,同时在忙碌的工作中也深感技术积累不够,在优秀的人身边工作必须更加花时 ...

最新文章

  1. 导出swagger2生成的文档
  2. .net 获取字符串中的第一个逗号的位置_用EXCEL合并同列字符串
  3. 2014迅雷校园招聘笔试题答案
  4. 聊聊技术、利基市场、激情与梦想
  5. 【线段树】【FeyatCup】——2.法法塔的奖励
  6. 苹果降价背后的代工厂之殇
  7. mysql memcached java_java缓存技术memcached实例
  8. mysql 5.5.35 单机多实例配置详解_基于mysql-5.5.32的单机多实例多配置文件的
  9. RAM格式与JPG对比
  10. NODE.JS菜鸟网总结
  11. 双击ie浏览器没反应打不开的解决方法
  12. 核心技术解析:移动端车牌识别系统方案
  13. 数字图像处理Project1——指纹图片的增强
  14. 【摸鱼吃瓜工作录】刚到公司,如何让项目经理对你刮目相看
  15. css如何将彩色图片变为黑白图片
  16. 100多个优秀的互联网编程学习平台整理。
  17. Keras实例教程(3)
  18. 【笔记】Python开发工程师要求摘录
  19. 枪战html源码,Unity3D 激情热血的枪战游戏 完整源码 Intense TPS v1.2
  20. c语言图书借阅系统源码.zip,C语言编写的图书借阅管理系统源代码.doc

热门文章

  1. Linux之时区修改
  2. 十三、MySQL数据库
  3. 线上相亲交友源码APP开发,是互联网婚恋市场的新途径
  4. Linux命令 ls
  5. 新装的linux设置root密码
  6. erlang json: jsx,rfc4627,mochijson2,jsonx 简单比较
  7. 最新彩色文字方格广告位代码
  8. Java经典面试题 带答案(三)
  9. 蓝鲸智云实现虚拟机交付(四)-配置平台自定义(CMDB)
  10. 2022年度总结:反思与回顾