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

1.前言:html

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

 

2.問題:github

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

然而在Spring中,在啓動容器對時候會經過beanFactory先建立初始化咱們要用的類。設計模式

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

 

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

 

4:方法:app

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

其次,咱們只要再注入一個支付工廠,每次去支付工廠拿本身想要的支付方式。這樣咱們就能夠像以前那樣,在本身想要的地方,只須要注入一個支付工廠便可。spring-boot

 

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吧。

相關文章
相關標籤/搜索