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();
}
}
打印:微信支付