消除代码中大量if....else判断的两种方式

if...else 根据判断之后的处理逻辑复杂性建议两种方式

 除了下面举例的两种,也可以采用不同方式代替其中的某个环节进行处理。同时下面的两种方式也是可以互换的。

1.每一种场景都比较简单---采用枚举方式

声明所有情况的枚举集合

public enum ExceptionMsgEnum {
	
	NET(1,"网路异常"),
	DATA(2,"数据异常"),
	OTHER(3,"其他异常");

	private int code;  
    private String msg; 
    
	ExceptionMsgEnum(int code,String msg){
		this.code = code;
		this.msg = msg;
	}
	public int getCode() {  
	    return this.code;  
	}  

	public String getMsg() {  
	    return this.msg;  
	}  
	  
	public static ExceptionMsgEnum getMessageEnum(int code) {  
		//匹配code等于传入值的枚举项
	    return Arrays.stream(ExceptionMsgEnum.values()).filter(x -> x.code == code).findFirst().orElse(null);  
    }  
}

测试使用:

 

public class ExceptionMain {

	public static void main(String[] args) {
		System.out.println(ExceptionMsgEnum.getMessageEnum(2).getMsg());
	}
}


打印:数据异常

2.每一种场景都比较复杂---采用策略加工厂模式

以下例子以不同支付方式举例说明:

第一步:声明接口

public interface Strategy {
	/**
	 * 标识属性
	 * @return
	 */
	String getType();
	/**
	 * 具体操作,不同策略的不同行为
	 * 
	 */
	void pay();
	

}

第二步:每种场景实现接口

/**
 * 微信支付
 * @author shaoh
 *
 */
public class WxPayStrategy implements Strategy{

	public String getType() {
		return "wx";
	}

	public void pay() {
		System.out.println("微信支付");
	}

}

/**
 * 支付宝支付
 * @author shaoh
 *
 */
public class ZfbPayStrategy implements Strategy{

	public String getType() {
		return "zfb";
	}

	public void pay() {
		System.out.println("支付宝支付");
	}

}

/**
 * 银行卡支付
 * @author shaoh
 *
 */
public class YhkPayStrategy implements Strategy{

	public String getType() {
		return "yhk";
	}

	public void pay() {
		System.out.println("银行卡支付");
	}

}

第三步:创建工厂类

/**
 * 支付方式工厂类
 * @author shaoh
 *
 */
public class StrategyFactory {
	Map<String, Strategy>  map = new HashMap<String, Strategy>();

	public StrategyFactory() {
		List<Strategy> strategys = new  ArrayList<Strategy>();
		strategys.add(new WxPayStrategy());
		strategys.add(new ZfbPayStrategy());
		strategys.add(new YhkPayStrategy());
		
		//list转成map<type,strategy>
		//toMap 第一个参数是一个Function,对应 Map 中的 key,第二个参数也是一个Function,strategy -> strategy, 左边strategy 是遍历 strategies 中的每一个strategy,右边strategy则是 Map 对应 value 值。
		map = strategys.stream().collect(Collectors.toMap(Strategy::getType, strategy -> strategy));
	}
	//静态内部类启动即完成初始
	public static class InitStrategyFactory{
		private static StrategyFactory strategyFactory = new StrategyFactory();
	}
	public static StrategyFactory getInstance() {
		return InitStrategyFactory.strategyFactory;
	}
	//获取支付方式
	public Strategy get(String type) {
        return map.get(type);
    }
	
}

第四步:调用测试

public class PayMain {

	public static void main(String[] args) {
		String payType = "wx";
		StrategyFactory.getInstance().get(payType).pay();
	}
}


打印:微信支付

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值