Java策略模式讲解+实现

Java策略模式讲解+实现

策略模式概述

策略模式作为Java的设计开发模式中,比较常见的一种模式,在实际开发和应用中有着比较重要的作用。
但是在很多同学的实际开发中,很容易去搞很多ifelse或者是switch等等。虽然当时写的时候很便捷,但后续维护已经对于代码的整洁来说就很不友好了。
这里先引入一下策略模式的概念。
策略模式可以理解为一种行为模型,什么情况下去做什么,跟ifelse很像,但是它将对象和行为进行分割,通过继承和接口调用来进行行为之间的转化,让实现也就是算法可独立于用户变化。
相对于粗暴的ifelse,策略模式将行为分割,通过spring进行管理。对“开闭原则”的完美支持,在不修改原有系统的基础上可以更换算法或者增加新的算法。应用的话呢,就是ifelse很多,里面实现又不同,后面还可能对行为进行多次代码变化的时候就可以使用策略模式了。
当然因为策略模式会有很多策略类,在管理的时候一定要注意对这些策略类的管理,不然后续找和理解策略类都会带来很大的麻烦。

实现场景

引入了概念和使用场景之后,我们来讲解一个例子来方便大家理解和使用,毕竟很多同学只是想找一个可以直接上路的demo。所以我这里会给大家拉出一个架子,同时写一些注释,来方便大家阅读和理解。

甲同学在开发的过程中遇到了一个需求,他需要对四种不同的产品执行不同的方案,每一个方案都很复杂,并且可能会跟随市场进行变动和调整,端上提供支持有限。这种时候他想使用策略模式来进行解决。
首先,端上的参数将四种产品赋予了“productA”,“productB”,“productC”,“productD”,来进行区分。根据不同的类别来进行操作。所以他对抽象类策略进行设置(类似于策略的顶层管理类):

public interface IBillStrategy {

    /**
     * 规则匹配的顶层接口,如果传出去的参数很多,String换成实体就好。括号里面的参数可以传一些需要实现和处理的参数
     *
     * @param dmpRuleSets
     * @param checkParam
     * @return
     */
    String ruleMarch(UpgradeRuleSetsEntity dmpRuleSets, CheckParam checkParam);
}

然后根据四个产品来设置不同产品策略:

@Service(“productA”)//把需要识别的类别放到这里,注意别导错包import org.springframework.stereotype.Service;
public class AllPassService implements IBillStrategy{
    @Override
    public String ruleMarch(UpgradeRuleSetsEntity dmpRuleSets, CheckParam checkParam){
    //里面存放相关的实现。参数什么的根据实际情况变化即可。
        System.out.println(“productA”);
        return “productA”;
    }
}

以此类推,设置四个(或是多个)策略类。这里便不在赘述。
最后只需要在需要判断或者是使用地方加入如下代码。

IBillStrategy bean = applicationContext.getBean(“productA”, IBillStrategy.class);
        String ruleHitsParam = bean.ruleMarch(dmpRuleSets, checkParam);

最后甲同学就拿到了对应产品的处理结果啦。
以上便是策略模式的一个简单实现。

扩展

对于策略模式,Java中还有很多其他的实现方法,比如drools等规则引擎,它可以根据数据库、端上或者是代码内的参数进行规则逐条匹配,也是一种对于多条规则匹配实现的方法,大家可以根据自己需求进行使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值