在业务代码中,使用策略模式代替if else

50 阅读1分钟

背景

当代码中业务复杂的时候,写了过多的if else,后期代码不好维护,适当使用策略模式来增强代码的维护性和可读性,有一定的益处,可以更具不同场景具体使用,下面列举一个带泛型的列子

代码列子

/**
 * 计算策略接口
 */
public interface CalculationStrategy<M,N,Q> {

    Q calculate(M a,N b);
}
package org.example.strategy;

import java.util.List;

public class AddCalculationStrategy implements CalculationStrategy<String, List<String>,Long> {


    @Override
    public Long calculate(String a, List<String> b) {

        if (b.contains(a)) {
            return 1L;
        }
        return null;
    }
}
package org.example.strategy;

public class ContextStrategy<M,N,Q> {

    private CalculationStrategy<M,N,Q> calculationStrategy;


    public void setCalculationStrategy(CalculationStrategy<M,N,Q> calculationStrategy) {
       this.calculationStrategy = calculationStrategy;
    }

    public Q executeCalculationStrategy(M m,N n){
        return calculationStrategy.calculate(m,n);
    }


}
package org.example.strategy;

import org.assertj.core.util.Lists;

import java.util.List;

public class CalculationTest {

    public static void main(String[] args) {




        ContextStrategy<String, List<String>,Long>
                contextStrategy = new ContextStrategy<>();

        // 在spring中,这个地方可以修改为bean注入方式和获取

        AddCalculationStrategy addCalculationStrategy
                = new AddCalculationStrategy();
        contextStrategy.setCalculationStrategy(addCalculationStrategy);


        Long l = contextStrategy.executeCalculationStrategy("123", Lists.newArrayList("123", "123"));
        System.out.println(l);

    }
}