解决平级if else 的杀手锏
注:if判断的条件单一且符合条件后处理简单,简易使用switch
二话不说上代码:
首先是简单的模式
interface IStrategy {
boolean isAccept(int type);
void process();
}
class StrategyFruitImpl implements IStrategy {
@Override
public boolean isAccept(int type) {
return type == 1 ? true : false;
}
@Override
public void process() {
// do fruit code
}
}
class StrategrVegetables implements IStrategy {
@Override
public boolean isAccept(int type) {
return type == 2 ? true : false;
}
@Override
public void process() {
// ...do vegetables
}
}
最重要的用法:
import java.util.ArrayList;
import java.util.List;
public class Strategy {
private static List<IStrategy> strategyList = prepare();
public static void main(String[] args) {
int type = 1;
doStrategyProcess(type);
}
/**
* 如果使用Spring,可以使用DI一键注入
* @return
*/
private static List<IStrategy> prepare(){
List<IStrategy> strategyList = new ArrayList<>();
strategyList.add(new StrategyFruitImpl());
strategyList.add(new StrategrVegetables());
return strategyList;
}
/**
* 根据 传参 处理自己关注的 类型
* @param type
*/
private static void doStrategyProcess(int type){
for (IStrategy item : strategyList) {
if (item.isAccept(type)) {
item.process();
}
}
}
}
原创不易,欢迎来赞