概念
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
代码案例
创建制造接口
/**
* 制造接口
*/
public interface Manufacture {
/**
* 生产方法
* @return
*/
String product();
}
创建三个实现类
@Slf4j
public class Car implements Manufacture {
/**
* 生产汽车
* @return
*/
@Override
public String product() {
log.info("生产出一辆汽车");
return "汽车";
}
}
/**
* 生产自行车
*/
@Slf4j
public class Bicycle implements Manufacture {
@Override
public String product() {
log.info("生产出一辆自行车");
return "自行车";
}
}
@Slf4j
public class Train implements Manufacture {
@Override
public String product() {
log.info("生产出一辆火车");
return "火车";
}
}
创建一个工厂类,根据要生产的车子类型选择创建的实例
/**
* 制造工厂
*/
@Service
@Slf4j
public class CarFactory {
public Manufacture getManufacture(String carType){
if (StringUtils.isEmpty(carType)){
return null;
}
if (StFlag.CAR.equals(carType)){
log.info("汽车制造厂");
return new Car();
}else if (StFlag.BICYCLE.equals(carType)){
log.info("自行车制造厂");
return new Bicycle();
}else if (StFlag.TRAIN.equals(carType)){
log.info("火车制造厂");
return new Train();
}
return null;
}
}
测试主类
/**
* 设计模式控制器
*/
@RestController
@RequestMapping("/designPattern")
@Slf4j
public class DesignController {
/**
* 引入车子制造厂
*/
@Autowired
private CarFactory carFactory;
@GetMapping("/factoryProduct")
public ResponseModel factoryProduct(String carType){
Manufacture manufacture = carFactory.getManufacture(carType);
if (StringUtils.isEmpty(carType) || null ==manufacture){
return new ResponseModel("请输入正确的车子类型", 500, null);
}
String product = manufacture.product();
return new ResponseModel("生产成功", 200, product);
}
}
测试案例
2022-06-15 00:33:43.430 INFO 火车制造厂 【http-nio-8081-exec-1】【CarFactory:26】
2022-06-15 00:33:43.431 INFO 生产出一辆火车 【http-nio-8081-exec-1】【Train:10】
2022-06-15 00:34:16.949 INFO 自行车制造厂 【http-nio-8081-exec-4】【CarFactory:23】
2022-06-15 00:34:16.952 INFO 生产出一辆自行车 【http-nio-8081-exec-4】【Bicycle:14】
2022-06-15 00:34:38.383 INFO 汽车制造厂 【http-nio-8081-exec-5】【CarFactory:20】
2022-06-15 00:34:38.385 INFO 生产出一辆汽车 【http-nio-8081-exec-5】【Car:14】