干掉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 map = new HashMap(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 map = new HashMap(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();
	}
}

 

你可能感兴趣的:(Java)