代碼中太多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();
}
}