教你用策略模式解决多重if-else

本文通过一个支付接口的场景,展示了如何利用策略模式重构原本使用多重if-else的代码,提高代码的扩展性和可维护性。通过定义策略接口和实现类,结合枚举与工厂模式,实现了对新支付方式的无缝添加,遵循了设计模式中的开闭原则。
摘要由CSDN通过智能技术生成

写在前面

很多人可能在公司就是做普通的CRUD的业务,对于设计模式,即使学了好像也用处不大,顶多就在面试的时候能说上几种常见的单例模式,工厂模式。而在实际开发中,设计模式似乎很难用起来。

在现在的环境下,程序员的竞争已经非常激烈了,要体现出自身的价值,最直接的体现当然是差异化。这无需多说,我认为在实际开发中能运用设计模式,是很能体现差异化的。设计模式是一些前人总结的较好的方法,使程序能有更好的扩展性,可读性,维护性。

下面举个例子,使用策略模式解决多重if-else的代码结构。想学习更多的设计模式的实战经验,那就点个关注吧,谢谢大佬。

使用if-else

假设我们要开发一个支付接口,要对接多种支付方式,通过渠道码区分各种的支付方式。于是定义一个枚举PayEnum,如下:

public enum PayEnum {
   
    ALI_PAY("ali","支付宝支付"),
    WECHAT_PAY("wechat","微信支付"),
    UNION_PAY("union","银联支付"),
    XIAO_MI_PAY("xiaomi","小米支付");
    /**渠道*/
    private String channel;
    /**描述*/
    private String description;
    PayEnum(String channel, String description) {
   
        this.channel = channel;
        this.description = description;
    }
    /**以下省略字段的get、set方法*/

创建一个PayController类,代码如下:

@RestController
@RequestMapping("/xiaoniu")
public class PayController {
   
    @Resource(name = "payService")
    private PayService payService;
    /**
    * 支付接口
    * @param channel 渠道
    * @param amount  消费金额
    * @return String 返回消费结果
    * @author Ye hongzhi
    * @date 2020/4/5
    */
    @RequestMapping("/pay")
    public String pay(@RequestParam(name = "channel") String channel,
                      @RequestParam(name = "amount") String amount
    )throws Exception{
   
        return payService.pay(channel,amount);
    }
}

再创建一个PayService接口以及实现类PayServiceImpl

public interface PayService {
   
    /**
    * 支付接口
    * @param channel 渠道
    * @param amount  金额
    * @return String
    * @author Ye hongzhi
    * @date 2020/4/5
    */
    String pay(String channel,String amount)throws Exception;
}
@Service("payService")
public class PayServiceImpl 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值