前景 已静态工厂+策略 处理多重if判断
先看最终调用代码
@RestController
public class DemoController {
@PostMapping(value = "/strategy/factory/pay")
public String pay(@RequestParam String payType) {
StrategyFactory strategyFactory = StrategyFactory.getInstance();
Pay pay = strategyFactory.get(payType);
String call = pay.call();
System.out.println(call);
return pay.call();
}
}
定义公用接口
public interface Pay {
String call();
String getType();
}
public class AliPay implements Pay {
@Override
public String call() {
System.out.println("调用支付宝");
return "ali";
}
@Override
public String getType() {
return PayConstant.ali_pay.name();
}
}
public class UnionPay implements Pay {
@Override
public String call() {
System.out.println("调用银联");
return "union";
}
@Override
public String getType() {
return PayConstant.union_pay.name();
}
}
public class WxPay implements Pay {
@Override
public String call() {
System.out.println("调用微信");
return "wx";
}
@Override
public String getType() {
return PayConstant.wx_pay.name();
}
}
枚举常量
public enum PayConstant {
ali_pay,
wx_pay,
union_pay;
}
定义工厂
public class StrategyFactory {
private Map<String, Pay> map;
public StrategyFactory() {
List<Pay> pays = new ArrayList<>();
pays.add(new AliPay());
pays.add(new WxPay());
pays.add(new UnionPay());
map = pays.stream().collect(Collectors.toMap(Pay::getType,strategy-> strategy));
}
public static StrategyFactory getInstance() {
return PayStrategyFactory.instance;
}
public Pay get(String type) {
return map.get(type);
}
public static class PayStrategyFactory{
public static StrategyFactory instance = new StrategyFactory();
}
}
效果图
- 请求
- 控制台打印