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;
    }
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值