国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

SpringBoot如何優雅切換支付渠道

開發 前端
策略模式的核心在于將不同的算法或行為封裝成獨立的策略類,使得它們可以相互替換,從而提高系統的靈活性和可維護性。

前言

項目開發中,我們經常需要根據不同條件動態選擇服務實現,例如根據支付類型選擇不同的支付處理器,或根據數據源類型選擇不同的數據訪問策略。

實現

基于策略模式的實現方案

策略模式的核心在于將不同的算法或行為封裝成獨立的策略類,使得它們可以相互替換,從而提高系統的靈活性和可維護性。

定義支付處理器接口
// 支付處理器接口
public interface PaymentProcessor {
    String processPayment(double amount);
}
實現具體支付處理器策略類
// 支付寶支付處理器
@Component
public class AlipayProcessor implements PaymentProcessor {
    @Override
    public String processPayment(double amount) {
        return"處理支付寶支付: " + amount;
    }
}

// 微信支付處理器
@Component
public class WechatPayProcessor implements PaymentProcessor {
    @Override
    public String processPayment(double amount) {
        return"處理微信支付: " + amount;
    }
}

// 銀行卡支付處理器
@Component
public class BankCardProcessor implements PaymentProcessor {
    @Override
    public String processPayment(double amount) {
        return"處理銀行卡支付: " + amount;
    }
}
定義支付策略上下文類
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;

@Component
public class PaymentContext {
    private final Map<String, PaymentProcessor> paymentProcessorMap;

    @Autowired
    public PaymentContext(Map<String, PaymentProcessor> paymentProcessorMap) {
        this.paymentProcessorMap = paymentProcessorMap;
    }

    public String processPayment(String paymentType, double amount) {
        PaymentProcessor processor = paymentProcessorMap.get(paymentType);
        if (processor != null) {
            return processor.processPayment(amount);
        }
        return"未找到對應的支付處理器: " + paymentType;
    }
}

PaymentContext類作為策略模式中的上下文,通過構造函數注入包含所有支付處理器的Map,并根據支付類型選擇相應的處理器執行支付處理,起到管理和調度策略的作用。

定義支付服務類和控制器類
// 支付服務類
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class PaymentService {
    private final PaymentContext paymentContext;

    @Autowired
    public PaymentService(PaymentContext paymentContext) {
        this.paymentContext = paymentContext;
    }

    public String handlePayment(String paymentType, double amount) {
        return paymentContext.processPayment(paymentType, amount);
    }
}

// 支付控制器類
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/payment")
public class PaymentController {
    private final PaymentService paymentService;

    @Autowired
    public PaymentController(PaymentService paymentService) {
        this.paymentService = paymentService;
    }

    @PostMapping("/process")
    public String processPayment(@RequestParam String paymentType, @RequestParam double amount) {
        return paymentService.handlePayment(paymentType, amount);
    }
}

基于 Map 注入的實現方案

基于Map注入的方式借助Spring的依賴注入機制,將接口的所有實現類以鍵值對形式注入到Map中,實現根據鍵值快速獲取對應實現類實例。

定義支付處理器接口和實現類

與策略模式中的定義相同,保持PaymentProcessor接口和支付寶、微信、銀行卡等支付處理器實現類,通過@Component注解將實現類注冊到Spring容器中。

改造支付服務類
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;

@Service
public class PaymentService {
    private final Map<String, PaymentProcessor> paymentProcessorMap;

    @Autowired
    public PaymentService(Map<String, PaymentProcessor> paymentProcessorMap) {
        this.paymentProcessorMap = paymentProcessorMap;
    }

    public void processPayment(String paymentType, double amount) {
        PaymentProcessor processor = paymentProcessorMap.get(paymentType);
        if (processor != null) {
            processor.processPayment(amount);
        } else {
            System.out.println("未找到對應的支付處理器: " + paymentType);
        }
    }
}

?支付服務類通過構造函數注入Map<String, PaymentProcessor>,在處理支付請求時,直接根據支付類型從Map中獲取對應的處理器實例并執行支付操作。

使用支付服務

同樣定義控制器類接收支付請求,調用PaymentService的方法完成支付處理,與策略模式中的控制器實現類似。

差異對比

  • 管理方式

     a.策略模式:通過上下文類明確管理策略對象,各個策略類職責清晰,系統結構更有條理,便于維護和擴展新策略。

     b.基于 Map:依賴 Spring 容器注入Map,元素管理較為松散,缺乏專門的管理角色,在復雜場景下可能導致代碼邏輯不夠清晰。

  • 查找邏輯
  • 策略模式:上下文類可根據多種復雜條件選擇策略,如用戶信息、業務規則等,適應復雜業務場景。
  • 基于 Map:主要依賴Map的get方法,根據單一鍵值查找,適合簡單的標識符匹配場景,復雜查找邏輯實現較困難。
  • 適用場景
  • 策略模式:適用于算法或行為多變、需要靈活切換,以及業務規則復雜、需多種條件組合選擇實現的場景。
  • 基于 Map:適合服務或實現類數量穩定、查找邏輯簡單,主要依據單一標識符選擇的場景。
責任編輯:武曉燕 來源: 一安未來
相關推薦

2023-06-28 08:25:14

事務SQL語句

2025-03-17 00:00:00

2024-03-18 14:06:00

停機Spring服務器

2024-04-08 08:09:10

埋點收集數據StartRocks數據存儲

2024-10-14 14:28:19

支付系統設計

2017-02-28 16:23:28

支付清結算渠道側

2023-10-27 08:20:12

springboot微服務

2025-11-18 07:52:13

2022-08-03 07:07:10

Spring數據封裝框架

2023-03-23 22:46:38

Spring限流機制

2024-07-22 19:31:34

2023-12-20 13:50:00

SpringBootJSON序列化

2024-12-26 07:47:05

Spring管理配置

2021-11-10 10:03:18

SpringBootJava代碼

2023-01-30 07:41:43

2019-01-24 16:11:19

前端全局異常數據校驗

2022-12-26 00:38:00

外聯網關平臺

2016-05-23 16:22:49

大眾點評支付網關系統

2025-09-02 09:32:33

Spring工具項目

2025-03-10 00:00:11

Spring框架數據
點贊
收藏

51CTO技術棧公眾號

麻豆tv入口在线看| 视频在线日韩| 97久久久精品综合88久久| 成人午夜在线视频一区| 色天使综合视频| 精品久久人人做人人爽| 第九色区av在线| 亚洲不卡在线观看| 老司机很黄的视频免费| 中文av一区二区| 亚洲中文字幕久久精品无码喷水| 蜜臀av性久久久久蜜臀aⅴ流畅 | 免费成人av电影| 一区二区三区在线不卡| 日本免费观看网站| 久久五月婷婷丁香社区| 国产精品网站免费| 成人一区二区三区在线观看| a级网站在线观看| 国产乱码精品1区2区3区| 色中文字幕在线观看| 精品一区二区精品| 日韩一二区视频| 国产精品自拍网站| www.国产在线视频| 久久中文娱乐网| 欧美三级理论片| 日本一区二区视频在线观看| 国产一区亚洲二区三区| 久久综合九色综合欧美98| 精品99在线视频| 国产色婷婷亚洲99精品小说| 日韩视频免费在线播放| 国产精品第四页| 一级毛片aaaaaa免费看| 色悠久久久久综合欧美99| 2017亚洲天堂1024| 日韩美女天天操| 日韩美女在线看免费观看| 精品久久久91| 要久久爱电视剧全集完整观看| 国产精国产精品| 欧美日韩少妇| 色一情一乱一伦一区二区三欧美| 麻豆国产精品视频| 妞干网在线免费视频| 亚洲制服丝袜在线| 老司机免费在线视频| 亚洲女成人图区| 都市激情亚洲欧美| 7777精品久久久大香线蕉小说| 一区二区三区国产在线| 好色先生视频污| 欧美国产精品久久| 欧美在线观看在线观看| 精品对白一区国产伦| 日韩久久一区| 成人在线观看视频网站| 日韩精品久久理论片| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 亚洲五码中文字幕| 日韩av毛片| 欧美激情免费观看| 亚洲天堂久久| 成人免费在线小视频| 一本大道久久a久久综合| 97人澡人人添人人爽欧美| 精品中文字幕在线2019| 欧美国产高清| av女优在线播放| 精品毛片网大全| a在线视频v视频| 欧美中文字幕视频| 免费日韩一区二区| 9久久婷婷国产综合精品性色 | 黄网站在线免费| 最近的2019中文字幕免费一页 | 国产91久久久久蜜臀青青天草二| 日韩欧美一区二区久久婷婷| 国产精品视频一区二区三区| 成人黄色av播放免费| 国产乱子轮精品视频| 在线的色视频| 中文在线不卡视频| 午夜日韩在线| 99re精彩视频| 精品香蕉一区二区三区| 久久看人人摘| 波多野结衣家庭教师在线| 在线观看欧美日本| 国产一级成人av| 亚洲色图都市激情| 欧美日韩一区成人| 蜜臀91精品国产高清在线观看| 亚洲综合网中心| 欧美在线观看视频一区二区| 中文字幕久久精品一区二区| 亚洲高清在线观看一区| 欧美日韩亚洲国产一区| 成人台湾亚洲精品一区二区 | 3d成人h动漫网站入口| 51社区在线成人免费视频| 欧美专区一二三| 欧美日韩国产丝袜另类| 97久久精品一区二区三区的观看方式| 国产一区二区三区无遮挡| 中文字幕在线观看一区二区| 卡通欧美亚洲| 欧美一区1区三区3区公司 | 精品免费99久久| 日韩免费视频| 日韩精品免费播放| 国产亚洲欧美日韩精品| 亚洲一区二区免费看| 依依成人在线| 96精品视频在线| 99久久久精品| 麻豆网站免费在线观看| 久久国产精品久久| 日本韩国精品在线| 欧美手机视频| 高清孕妇孕交╳╳交| 欧美成人精品一区| 成人一区二区三区视频在线观看 | 欧美激情一区二区三区| av丝袜在线| 成人淫片免费视频95视频| 91欧美日韩一区| 欧美v日韩v国产v| 成人一区二区三区视频| 亚洲春色h网| 国产农村妇女精品一二区| 99re久久最新地址获取| 亚洲欧洲日本韩国| 亚洲福利二区| av在线电影网| 香蕉一区二区| 国产精品久久久久婷婷二区次| 精品人在线二区三区| 2023国产精品自拍| 久久av电影| 欧美成人一级| 亚洲精品88| 国产a视频免费观看| 91精品久久久久久蜜桃| 欧美日韩中文在线| 久久成人久久鬼色| 蜜芽一区二区三区| 亚洲欧美综合国产精品一区| 9l视频自拍蝌蚪9l视频成人| 日韩黄色在线| 日韩精品社区| 亚洲理论电影网| 精品96久久久久久中文字幕无| 视频一区二区三区免费观看| 国产精品一区二区欧美| 免费特级黄色片| 黄色片在线看| 精品深夜福利视频| 91在线国产福利| 欧美日本一道本在线视频| 色在人av网站天堂精品| 亚洲国产婷婷香蕉久久久久久99| 一二三四社区在线视频6| 日本中文字幕视频一区| 麻豆高清免费国产一区| 欧美性色视频在线| 99视频在线| 亚洲男人天堂| 亚洲国产国产| 亚洲精品老司机| 91视频国产精品| caoliu在线| 国产精品原创| 亚洲电影影音先锋| 国产成人av福利| 亚洲国产一区二区在线播放| 精品美女一区二区| 亚洲91精品在线| 手机看片日韩国产| 成人网址大全| 韩国三级一区| 欧美/亚洲一区| 91免费国产在线| 91精品国产综合久久精品麻豆| 国产精品久久av| 日本在线xxx| 综合另类专区| 蘑菇福利视频一区播放| 亚洲一区二区在线播放相泽| 91成人免费在线视频| 亚洲男人天天操| 97在线免费观看| 国产美女主播一区| 精品免费国产| 久久精品.com| 欧美影视一区| 久久精品视频网站| 黄页网站大全在线观看| 男人的天堂在线视频|