专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

if-else 优化之 --策略模式

策略模式

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

实战用途 ,解决多个if-else导致代码冗余

1、 业务处理主服务类

@Service
public class StrategyMode {
    /**
     * 业务逻辑分派Map
     * Function为函数式接口,下面代码中 Function<String, String> 的含义是接收一个Stirng类型的变量,返回一个String类型的结果
     * 单条件
     */
    private Map<String,Function<String,String>> checkResultDispatcher = new HashMap<>();

    @Autowired
    private IDerive derive;
    /**
     *  初始化  业务逻辑分派的 Map
     *  其中value存放的是  lamada表达式
     */
    @PostConstruct
    public void setCheckResultDispatcherInit (){
        /*checkResultDispatcher.put("分流1", order -> String.format("对%s执行对应的业务逻辑1" , order));
        checkResultDispatcher.put("分流2", order -> String.format("对%s执行对应的业务逻辑2" , order));
        checkResultDispatcher.put("分流3", order -> String.format("对%s执行对应的业务逻辑3" , order));
        checkResultDispatcher.put("分流4", order -> String.format("对%s执行对应的业务逻辑4" , order));
        checkResultDispatcher.put("分流5", order -> String.format("对%s执行对应的业务逻辑5" , order));
        checkResultDispatcher.put("分流6", order -> String.format("对%s执行对应的业务逻辑6" , order));*/

        checkResultDispatcher.put("业务1" , order -> derive.part1(order));
        checkResultDispatcher.put("业务2" , order -> derive.part2(order));
        checkResultDispatcher.put("业务3" , order -> derive.part3(order));
        checkResultDispatcher.put("业务4" , order -> derive.part4(order));
    }

    public String getCheckResultSuper(String order){
        Function<String,String> result = checkResultDispatcher.get(order);
        if(result != null){
            return result.apply(order);
        }
        return "不在处理的业务范围你之内";
    }
}

1、 派生处理业务(可以写接口)

/**
 * @ClassName IDerive
 * @Description  派生处理的业务逻辑
 * @Author xiongchao
 * @Date 2020/6/24 14:51
 **/
public interface IDerive {

    String part1 (String order);

    String part2 (String order);

    String part3 (String order);

    String part4 (String order);

    String part5 (String order);
}

1、 实现类,进行对应的业务逻辑处理

@Service
public class DeriveImpl implements  IDerive {
    @Override
    public String part1(String order) {
        return order + "业务1";
    }

    @Override
    public String part2(String order) {
        return order + "业务2";
    }

    @Override
    public String part3(String order) {
        return order + "业务3";
    }

    @Override
    public String part4(String order) {
        return order + "业务4";
    }

    @Override
    public String part5(String order) {
        return order + "业务5";
    }
}

方法二 (多任务处理最佳)

1、 公共接口定义

/**
 * @ClassName IntefaceHome
 * @Description    接口定义  根据匹配的类名  去调用对应的 逻辑代码处理   策略模式
 * @Author xiongchao
 * @Date 2020/6/24 15:24
 **/
public interface IntefaceHome {

    ConcurrentHashMap<String,IntefaceHome> models = new ConcurrentHashMap<>();

    String exucet(Object obj);

}

1、 方法的调用

/**
 * @ClassName Mulitipart
 * @Description TODO
 * @Author xiongchao
 * @Date 2020/6/24 15:28
 **/
public class Mulitipart implements IntefaceHome {

    @PostConstruct
    public void init (){
        models.put(this.getClass().getSimpleName(),this);
    }

    @Override
    public String exucet(Object obj) {
        //这里直接通过类名匹配,调用指定的类
        //这里进行对应的逻辑length处理  ,调用的时候  根据key去匹配 调用对应的逻辑类
        IntefaceHome home = IntefaceHome.models.get(obj.getTask());
        home.exucet(obj);
        return null;
    }

}

文章永久链接:https://tech.souyunku.com/40818

未经允许不得转载:搜云库技术团队 » if-else 优化之 --策略模式

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们