一個支付案例,學(xué)會策略模式!
往期熱門文章:
1、面試被問事務(wù)注解 @Transactional 失效怎么解決? 2、CTO 說了,用錯 @Autowired 和 @Resource 的人可以領(lǐng)盒飯了 3、在項目中用了Arrays.asList、ArrayList的subList,被公開批評 4、這六個 MySQL 死鎖案例,能讓你理解死鎖的原因! 5、別總寫代碼,這130個網(wǎng)站比漲工資都重要
一、支付案例
1.普通代碼
@PostMapping("/makeOrder")
public ResultData makeOrder(@RequestBody Order order){
// 生成自己的訂單,并且設(shè)置訂單的失效時間,并且定時回滾
// ... 此處代碼省略
// 處理支付方式
if(order.getType=="alipay"){ // 支付寶
this.payService.alipay(order);
}else if (order.getType=="weixin"){ // 微信
this.payService.weixinpay(order);
}else if (order.getType=="jd"){ // 京東支付
this.payService.jtpay(order);
}else if (order.getType=="yunshanfu"){ // 云閃付
this.payService.yunshanfupay(order);
}
// 發(fā)送到mq,進行廣播。
return this.ok(order);
}
@PostMapping("/alipay")
public ResultData makeOrder(@RequestBody Order order){
}
@PostMapping("/jdpay")
public ResultData makeOrder(@RequestBody Order order){
}
2.引入策略模式
private OrderService orderService;
@PostMapping("/makeOrder")
// 商品id
// 支付類型
public ResultData makeOrder(Long goodsId,String type){
// 生成本地的訂單
Order order = this.orderService.makeOrder(goodsId);
//選擇支付方式
PayType payType = PayType.getByCode(type);
//進行支付
payType.get().pay(order.getId(),order.getAmount());
return this.ok();
}
public enum PayType {
//支付寶 AliPay 是實現(xiàn)類
ALI_PAY("1",new AliPay()),
//微信
WECHAT_PAY("2",new WechatPay());
private String payType;
// 這是一個接口
private Payment payment;
PayType(String payType,Payment payment){
this.payment = payment;
this.payType = payType;
}
//通過get方法獲取支付方式
public Payment get(){ return this.payment;}
public static PayType getByCode(String payType) {
for (PayType e : PayType.values()) {
if (e.payType.equals(payType)) {
return e;
}
}
return null;
}
}
public interface Payment {
public void pay(Long order, double amount);
}
public class AliPay implements Payment {
@Override
public void pay(Long order, double amount) {
System.out.println("----支付寶支付----");
System.out.println("支付寶支付111元");
}
}
public class WechatPay implements Payment {
@Override
public void pay(Long orderId, double amount) {
System.out.println("---微信支付---");
System.out.println("支付222元");
}
}
最近熱文閱讀:
1、終于來了,IDEA 2021.1版本正式發(fā)布,完美支持WSL 2 2、面試被問事務(wù)注解 @Transactional 失效怎么解決? 3、CTO 說了,用錯 @Autowired 和 @Resource 的人可以領(lǐng)盒飯了 4、在項目中用了Arrays.asList、ArrayList的subList,被公開批評 5、別總寫代碼,這130個網(wǎng)站比漲工資都重要 6、哇!IntelliJ IDEA 2021.1 中竟然有這么多牛逼的插件~ 7、能掙錢的,開源 SpringBoot 商城系統(tǒng),功能超全,超漂亮,真TMD香! 8、放棄 Notepad++,事實證明,還有 5 款更牛逼…… 9、公司這套架構(gòu)統(tǒng)一處理 try...catch 這么香,求求你不要再滿屏寫了,再發(fā)現(xiàn)扣績效! 10、Spring 中經(jīng)典的 9 種設(shè)計模式!收藏了 關(guān)注公眾號,你想要的Java都在這里
評論
圖片
表情
