在商城系統中使用設計模式----簡單工廠模式之在springboot中使用簡單工廠模式


1.前言:

不了解簡單工廠模式請先移步:在商城中使用簡單工廠。在這里主要是對springboot中使用簡單工廠模式進行解析。

 

2.問題:

什么是簡單工廠:它的實現方式是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類(這些產品類繼承自一個父類或接口)的實例。

然而在Spring中,在啟動容器對時候會通過beanFactory先創建初始化我們要用的類。

一個是要在使用的時候去創建一個產品類,一個是預先已經加載好了我們要使用的對象,那我們要如何解決這個問題呢?

 

3.場景:在一個商城系統中,用戶可以選擇三種支付方式,微信支付,支付寶支付,余額支付。

 

4:方法:

我們只要將要用到的支付方式注入到容器中,我們便可以根據bean到名字去容器中獲取。當然只要是很不靈活的。

其次,我們只要再注入一個支付工廠,每次去支付工廠拿自己想要的支付方式。這樣我們就可以像之前那樣,在自己想要的地方,只需要注入一個支付工廠即可。

 

5.實現:

 步驟1.創建接口類

public interface PaymentMethod {
    void pay();
}

步驟2.實現接口類

//沒有指定value,注入的bean默認首字母小寫
@Service
public class Alipay implements PaymentMethod {
    
    @Override
    public void pay() {
        System.out.println("支付寶支付");
    }
}
@Service
public class BalancePay implements PaymentMethod {
    @Override
    public void pay() {
        System.out.println("余額支付");
    }
}
@Service
public class WechatPay implements PaymentMethod {
    @Override
    public void pay() {
        System.out.println("微信支付");
    }
}

步驟3.直接在容器中,根據bean的名字獲取需要的對象。

@SpringBootApplication
public class SpringBootSimpleFactoryApplication {

    public static void main(String[] args) {

        ConfigurableApplicationContext context = SpringApplication.run(SpringBootSimpleFactoryApplication.class, args);
//        String[] beans = context.getBeanDefinitionNames();
//        for (String bean:beans) {
//            System.out.println("bean:"+bean);
//        }
        //然而在實際開發中,是不可能經常通過context獲取bean的
        PaymentMethod paymentMethod = (PaymentMethod) context.getBean("alipay");
        paymentMethod.pay();
    }

步驟4.創建一個工廠,根據所要給定的信息返回相應的bean

@Service
public class PayFactory {

    @Autowired
    private Alipay alipay;
    @Autowired
    private BalancePay balancePay;
    @Autowired
    private WechatPay wechatPay;

    public PaymentMethod pay(String payType){

        switch (payType){

            case "balancePay":
                return balancePay;
            case "alipay":
                return alipay;
            case "wechatPay":
                return wechatPay;

            default:
                System.out.println("支付方式錯誤");

        }
        return null;
    }

}

步驟5.在controller層調用支付工廠。(找不到ResponseResult類,請移步單例模式之餓漢模式中獲取)

@RestController
public class PayController {

    @Autowired
    private PayFactory payFactory;

    @RequestMapping("pay")
    public ResponseResult pay(String payType){

        ResponseResult responseResult = ResponseResult.getInstance();

        try {
            PaymentMethod paymentMethod = payFactory.pay(payType);
            paymentMethod.pay();
            responseResult.setMsg("操作成功");
            responseResult.setCode(0);
        }catch (Exception e){
            e.printStackTrace();
            responseResult.setMsg("支付類型錯誤");
            responseResult.setCode(1);
        }

        return responseResult;
    }

}

 

源碼:

在springboot中使用簡單工廠模式

 

 

在工作中,不能靈活的時候設計模式。希望通過這次的學習,可以加深對設計模式對理解。

接下來會繼續整理出自己在工作對時候可以使用對設計模式,不對望指點。如果文章對您有幫助,github給個start吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM