策略模式简单应用

        目前在做的业务中需要根据配置发放不同的奖励,包括:红包、券、实物等,最直观的做法是if else判断执行不同的发奖逻辑,但是分支太多了容易混淆,代码可读性也差,索性整理一下使用策略模式来实现。

        策略模式的类图如下:

那就依葫芦画瓢,首先定义一个发奖策略类:

public interface PrizeStrategy {
    Object award(String param);
}

然后声明具体发奖策略类:

@Component("coupon")
public class CouponPrizeStrategy implements  PrizeStrategy{
    @Override
    public Object award(String param) {
        System.out.println("发红包了");
        return "coupon";
    }
}


@Component("gift")
public class GiftPrizeStrategy implements  PrizeStrategy{
    @Override
    public Object award(String param) {
        System.out.println("发实物");
        return "实物";
    }
}


@Component("hongBao")
public class HongBaoPrizeStrategy  implements PrizeStrategy{
    @Override
    public Object award(String param) {
        System.out.println("发红包了");
        return "hongbao";
    }
}

 接下来创建上下文类:

@Component
public class PrizeContext {
    @Autowired
    private Map<String,PrizeStrategy> map;

    public Object getPrize(String type){
       return map.get(type).award("");
    }
    
}

测试调用:

@RestController
public class PrizeController {
    @Autowired
    private PrizeContext prizeContext;

    @GetMapping("/prize")
    public Object prize(String award){
        Object prize = prizeContext.getPrize(award);
        System.out.println(prize);
        return "bingo";
    }
}

响应:

调试观察:

 无需额外操作,即可正常注入map进行使用。

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值