设计模式--简单工厂模式之在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吧。

 

人已赞赏
随笔日记

【python3】——centos7下安装

2020-11-9 4:06:03

随笔日记

记录使用 Cake 进行构建并制作 nuget 包

2020-11-9 4:06:05

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索