interface
public interface Calc {
String getName();
int doOption(int a, int b);
}
不同的实现方式
@Service
public class CountCalc implements Calc {
@Override
public String getName() {
return "jia";
}
@Override
public int doOption(int a, int b) {
return a + b;
}
}
@Service
public class SubtractCalc implements Calc {
@Override
public String getName() {
return "jian";
}
@Override
public int doOption(int a, int b) {
return a - b;
}
}
策略模式
- ObjectProvider 对象提供器
@Slf4j
@Service
public class SuperContext {
private Map<String, Calc> objMap=Maps.newHashMap();
@Autowired
SuperContext(ObjectProvider<List<Calc>> calcProvider) {
List<Calc> calcs =calcProvider.getIfAvailable();
Assert.notNull(calcProvider,"获取到的对象是空的 is null");
for (Calc calc : calcs) {
objMap.put(calc.getName(), calc);
}
}
public int doAction(String type, int a, int b){
return objMap.get(type).doOption(a, b);
}
}