首先将需要路由的渠道信息采用map进行封装,这样的话,可以在使用的时候基于特定的策略进行路由。
@Component
public class PayContextStrategy {
private static final String aliPay ="10001";
private static final String yinlian ="10002";
//容器: map
private static Map<String, PayStrategy> strategyMap = new ConcurrentHashMap<>();
//静态块 : static
static {
strategyMap.put(aliPay, new AliPayStrategy());
strategyMap.put(yinlian, new YinLianPayStrategy());
}
//获取实例对象
public static PayStrategy getInstance(String code) {
return strategyMap.get(code);
}
public String toPay(String payCode){
PayStrategy payStrategy = getInstance(payCode);
if(payStrategy==null){
return "没有该渠道信息";
}
return payStrategy.toPay();
}
}
优化:可以将渠道信息放在枚举中,然后放入到map中。
支付宝渠道服务:
@Component
public class AliPayStrategy implements PayStrategy {
public String toPay() {
return "调用支付宝支付接口...";
}
}
银联渠道支付服务:
/**
* 银联支付
*/
@Component
public class YinLianPayStrategy implements PayStrategy {
public String toPay() {
return "调用银联支付接口...";
}
}
进行调用:
@RestController
public class PayController {
@Autowired
private PayContextStrategy payContextStrategy;
@RequestMapping("/toPay")
public String toPay(String payCode){
if(StringUtils.isEmpty(payCode)){
return "渠道code不能为空!";
}
return payContextStrategy.toPay(payCode);
}
}
当然在调用具体的业务时,策略调用放在service业务里面
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。