浅谈策略模式

对策略模式的一点愚见

在项目恰当的使用策略模式,可以使代码简洁明了,提高扩展性。最常见的使用场景在有多层if-else的逻辑判断中。通过策略模式的替换,让代码更优雅。

一.个简单的例子

在这里插入图片描述

这样的写法虽然简单,但也带来了一些问题
1.如果每个分支的业务逻辑比较复杂,就会导致当前方法非常的臃肿
2.给其他开发人员带来了阅读困难(心里吐槽:这谁写的垃圾玩意),提高了维护成本
二.改进措施 策略模式
通过策略模式实现多个用户类型的业务处理
2.1 实现方式
2.1.1.一个抽象的业务接口
2.1.2.具体的业务实现类
2.1.3应用类 : 声明接口的属性,通过构造函数对接口的属性赋值。类中提供执行方法,实现具体策略的调用
2.2 具体代码
2.2.1.一个抽象的业务接口
在这里插入图片描述
2.2.2.具体的业务实现类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.2.3应用类
在这里插入图片描述
2.3 测试案例
public class LoginTest {

/**
 * 模拟一个用户登录的业务场景
 * 不同类型的用户登录会有不同的处理逻辑
 *  userType : 0 :普通用户; 1:银卡用户; 2:金卡用户 ......
 */
public static void main(String[] args) {

    //正式项目中一般使用 @Autowired 注入
    commonLogin commonLogin = new commonLogin();
    silverLogin silverLogin = new silverLogin();
    goldLogin goldLogin = new goldLogin();

    LoginContext loginContext = null;
    //测试用户
    User user1 = new User("001", "0");

    //判断用户类型
    if ("0".equals(user1.getUserType())){
        // TODO 普通用户业务处理逻辑
        loginContext = new LoginContext(commonLogin);

    }else if ("1".equals(user1.getUserType())){
        // TODO 银卡用户业务处理逻辑
        loginContext = new LoginContext(silverLogin);

    }else if ("2".equals(user1.getUserType())){
        // TODO 金卡用户业务处理逻辑
        loginContext = new LoginContext(goldLogin);

    }
    if (loginContext != null){
        String executeLgoin = loginContext.executeLgoin(user1.getUserId());
        System.out.println(executeLgoin);
    }

}

}
2.4 测试结果
在这里插入图片描述
2.5 一点小思考
应用类的作用?
简单的来看,如果不使用应用类,直接调用具体的策略方法,功能也能实现。
我的想法是:
1.通过应用类调用实现了业务和策略算法的解耦
2.应用类相当于一个代理类,可以对策略的调用做增强处理

三.总结
通过策略模式的使用,很直观的看出业务方法没有以前那么臃肿。通过应用类调用具体的策略对象。让业务和策略算法实现解耦。
在实际项目中但也不建议看见if-else无脑换策略模式,如果业务本身就很简单,总共也就两三个判断分支 ,也就没必要用策略模式。
以上是我对策略模式的一些愚见,如果文中有什么不妥的地方,还请斧正。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值