代码中太多if else。干掉多重if else的两种方式。虽然知道怎样去除,但是实际开发中衡量使用哪种异或还是使用if else本身
最近有种武器很多但是不知道跟不同对手打该用啥感觉!!! emmmm
一、枚举
Integer level = 1;
if(level == 1){
System.out.println("1 do something...");
}else if(level == 2){
System.out.println("2 do something...");
}else{
System.out.println("no catch");
}
这种情况可以改为枚举方式。既简单又赋予了1、2等业务上的含义。
public enum LevelEnum {
normal(1){
@Override
public void action() {
System.out.println(value + "do something....");
}
},vip(2){
@Override
public void action() {
System.out.println(value + "do something....");
}
};
int value;
LevelEnum(int value){
this.value = value;
}
public abstract void action();
public static LevelEnum getEnumByValue(int value){
for (LevelEnum level : values()) {
if(value == level.value){
return level;
}
}
return null;
}
}
LevelEnum levelEnum = LevelEnum.getEnumByValue(level);
levelEnum.action();
二、策略模式
1、定义接口
public interface Level {
public void action();
}
2、定义不同的实现
public class VipLevel implements Level{
@Override
public void action() {
System.out.println(VipLevel.class.getSimpleName());
}
}
public class NormalLevel implements Level{
@Override
public void action() {
System.out.println(NormalLevel.class.getSimpleName());
}
}
3、定义level与类的关系
private static Map<Integer,Level> map = new HashMap<Integer,Level>(4);
static {
map.put(1, new NormalLevel());
map.put(2, new VipLevel());
}
4、定义策略类,当然这里完全也可以不用继承Level;
public class StrategyLevel implements Level{
private Level level;
public StrategyLevel(Level level){
this.level = level;
}
@Override
public void action() {
level.action();
}
}
5、使用方式
public class Test2 {
private static Map<Integer,Level> map = new HashMap<Integer,Level>(4);
static {
map.put(1, new NormalLevel());
map.put(2, new VipLevel());
}
public static void main(String[] args) {
Integer level = 1;
StrategyLevel strategyLevel = new StrategyLevel(map.get(level));
strategyLevel.action();
}
}
扫描二维码关注公众号,回复:
9814515 查看本文章