成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

策略模式介紹以及具體使用場景

開發 前端
InitializingBean接口為bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是繼承該接口的類,在初始化bean的時候都會執行該方法。

前言

在實際開發過程中經常會出現行為不同的實現,比如支付,那可能是微信支付,阿里支付,銀聯等支付的具體實現。要你用一個設計模式來實現

定義

策略模式定義了一系列算法,并將每個算法封裝起來,使他們可以相互替換,且算法的變化不會影響到使用算法的客戶

UML類圖

具體實現

InitializingBean接口說明

1、InitializingBean接口為bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是繼承該接口的類,在初始化bean的時候都會執行該方法。

2、spring初始化bean的時候,如果bean實現了InitializingBean接口,會自動調用afterPropertiesSet方法。

3、在Spring初始化bean的時候,如果該bean實現了InitializingBean接口,并且同時在配置文件中指定了init-method,系統則是先調用afterPropertieSet()方法,然后再調用init-method中指定的方法。

策略工廠

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class StrategyFactory {

private static final Map<String, PayService> serviceMap = new ConcurrentHashMap<>();

public static void register(PayTypeEnum payTypeEnum, PayService service){
serviceMap.put(payTypeEnum.getType(), service);
}

public static Boolean getService(String payType){
PayService payService = serviceMap.get(payType);
if(payService!=null){
return payService.pay(payType);
}
return Boolean.FALSE;
}
}

支付枚舉

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public enum PayTypeEnum {
WX("wx", "微信"),
ZFB("zfb","支付寶支付"),;
private String type;
private String desc;
}

具體業務類

1、支付入口

public interface PayService {
Boolean pay(String payType);
}

2、支付入口具體實現

微信支付邏輯

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class WxPayService implements PayService, InitializingBean {

@Override
public void afterPropertiesSet() throws Exception {
StrategyFactory.register(PayTypeEnum.WX,this);
}

@Override
public Boolean pay(String payType){
log.info("調用微信支付");
return true;
}
}

阿里支付具體邏輯

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;


import org.springframework.stereotype.Service;

@Service
@Slf4j
public class AliPayService implements PayService, InitializingBean {
@Override
public void afterPropertiesSet(){
StrategyFactory.register(PayTypeEnum.ZFB, this);
}
@Override
public Boolean pay(String payType){
log.info("調用阿里支付");
return true;
}
}

3、定義一個控制器測試

import com.example.demo.celuemoshi.StrategyFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PayController {

@GetMapping("pay/{type}")
public boolean pay(@PathVariable("type") String type){
StrategyFactory.getService(type);
return true;
}
}

測試結果

測試微信支付:http://localhost:10001/pay/wx

測試阿里支付:http://localhost:10001/pay/zfb

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2020-04-07 14:20:10

RabbitMMySQL數據庫

2023-02-22 09:16:22

2023-03-20 09:17:13

策略模式Springboot

2021-08-29 22:05:04

對象自動回收

2023-06-06 08:18:24

Kafka架構應用場景

2020-10-29 07:16:26

布隆過濾器場景

2015-06-26 11:33:23

Python裝飾器使用場景實踐

2021-11-04 06:58:32

策略模式面試

2014-05-15 09:43:11

CloudaMobile WebANodejs

2023-05-16 07:47:18

RabbitMQ消息隊列系統

2018-08-15 09:48:27

數據庫Redis應用場景

2021-04-27 08:31:10

前端應用場景

2020-06-16 15:40:32

閉鎖柵欄線程

2021-08-06 10:43:56

Kubernetes容器

2009-09-24 16:55:27

策略模式

2023-10-29 15:21:42

負載均衡器分布式系統后端

2024-05-11 12:47:16

Kafka場景.高性能

2021-08-13 12:31:26

Redis代碼Java

2024-04-11 13:41:47

2022-10-12 07:24:18

大文件哈希算法Hash
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天综合国产 | 日本不卡一区二区三区在线观看 | 亚洲国产一区二区三区在线观看 | 国产精品99久久久久久宅男 | 免费一区二区三区 | 羞羞视频免费在线观看 | 手机av在线 | www.日本精品 | 久久综合久久久 | 日韩欧美专区 | 在线免费观看毛片 | 国产精品免费小视频 | 91看片在线观看 | 亚洲高清成人在线 | 亚洲成人在线网 | 精品一区二区三区四区视频 | 一区二区三区在线观看视频 | 久久国产精99精产国高潮 | 亚州视频在线 | 亚洲精品9999 | 国产毛片毛片 | 激情五月综合网 | 天天躁日日躁狠狠的躁天龙影院 | 韩日一区二区三区 | 在线中文视频 | 黄色欧美视频 | 国产精品欧美日韩 | 久久亚洲国产精品 | 日本一区二区高清不卡 | 午夜一区二区三区在线观看 | 欧美片网站免费 | 亚洲一区 中文字幕 | 在线播放亚洲 | 亚洲免费视频网站 | 久草网站 | 国产91丝袜在线播放 | 亚洲精品视频一区 | 色综合久 | 亚洲视频在线一区 | 涩涩导航 | 一色桃子av一区二区 |