在商城系统中使用设计模式----简单工厂模式之在springboot中使用简单工厂模式

时间:2023-03-09 02:04:42
在商城系统中使用设计模式----简单工厂模式之在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吧。