幹掉if else

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章