徒手撸设计模式-工厂模式
2022-07-06 17:29 hikoukay 阅读(24) 评论(0) 编辑 收藏 举报概念
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
https://www.runoob.com/design-pattern/factory-pattern.html
代码案例
创建制造接口
/** * 制造接口 */ 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】