Outlook has static factory + strategy handle multiple if judgment
Look at the final calling code
@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();
}
}
The definition of common interface
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();
}
}
Enumeration constant
public enum PayConstant {
ali_pay,
wx_pay,
union_pay;
}
Custom Factory
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();
}
}
Renderings
- request
- Console Print