1. 定义抽象策略类
public abstract class PayStrategy {
// 验签
public abstract boolean signParam(String sign);
// 下单
public abstract Map createOrder(String jsonOrder);
// 支付回调(异步)
public abstract String notifyResult(String xmlData);
}
2. 定义策略实现
@Component 指定策略类的别名。
AliPay
@Component("Ali")
public class AliPayService extends PayStrategy {
@Override
public boolean signParam(String sign) {
System.out.println("this Ali sign ");
return false;
}
@Override
public Map createOrder(String jsonOrder) {
System.out.println("this Ali createOrder ");
return null;
}
@Override
public String notifyResult(String xmlData) {
System.out.println("this Ali notifyResult ");
return null;
}
}
WxPay
@Component("Wx")
public class WxPayService extends PayStrategy {
@Override
public boolean signParam(String sign) {
System.out.println("this Wx sign ");
return false;
}
@Override
public Map createOrder(String jsonOrder) {
System.out.println("this Wx createOrder ");
return null;
}
@Override
public String notifyResult(String xmlData) {
System.out.println("this Wx notifyResult ");
return null;
}
}
3. 定义工厂
@Component
public class PayFactory {
private Map payStrategy = new ConcurrentHashMap<>();
@Autowired
public PayFactory(Map payStrategy) {
this.payStrategy = payStrategy;
}
public PayStrategy strategy(String type) {
PayStrategy strategy = payStrategy.get(type);
if (strategy == null) {
throw new RuntimeException("选择策略未定义!");
}
return strategy;
}
}
4. Controller
@RestController
@RequestMapping("/api/test")
public class PayInfoController {
@Autowired
private PayFactory payFactory;
@ApiOperation(value = "创建订单",notes = "创建订单")
@GetMapping("/createOrder")
public String createOrder(String jsonOrder,String type) {
Map order = payFactory.strategy(type).createOrder(jsonOrder);
return order.toString();
}
}
5.测试
http://localhost/car_pool_plat/api/test/createOrder?type=Wx
6. 项目层级



