背景
当代码中业务复杂的时候,写了过多的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);
}
}