本文介绍策略模式的具体应用以及Map+函数式接口如何 "更完美" 的解决 if-else的问题。
最近写了一个服务:根据优惠券类型(resourceType)和优惠券编码(resourceId)来 查询优惠券的发放方式(grantType)
实现方式:
优惠券有多种类型,分别对应了不同的数据库表:
红包 —— 红包发放规则表
购物券 —— 购物券表
QQ会员 —— QQ会员表
实际的优惠券远不止这些,这个需求是要我们写一个业务分派的逻辑,第一个能想到的思路就是if-else或者switch case:
- public class Demo {
-
- public static void main(String[] args){
- String resourceType="红包";
- String resourceId="1";
- String grantType;
- switch(resourceType) {
- case "红包":
- // 根据优惠券编码(resourceId)去数据库里查询红包的分发方式
- grantType = "每周末9点发放";;
- break;
- case "购物券":
- // 根据优惠券编码(resourceId)去数据库里查询购物券的分发方式
- grantType = "每周三9点发放";
- break;
- case "QQ会员":
- // 根据优惠券编码(resourceId)去数据库里查询QQ会员的分发方式
- grantType = "每周一0点开始秒杀";
- break;
- default:
- grantType = "查找不到("+resourceType+")的优惠券类型以及对应的派发方式";
- break;
- }
- Syst