创建型设计模式工厂方法模式
Posted riches
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建型设计模式工厂方法模式相关的知识,希望对你有一定的参考价值。
一、一句话背景
我需要一辆汽车,那我可以直接从工厂里面提货,而不用去管汽车是怎么做出来的,以及生产汽车的具体实现,我只需要告诉这个工厂要生产什么品牌的汽车就好,具体的汽车生产流水线我也不用管。
二、使用场景
知道部分特性而创建具体对象的场景。
如:根据环境类型(dev,test或master等)直接调用一整套环境配置
三、模型分析
生产流水线:接口,定义了生产汽车的方法
具体产品的生产流水线:类,里面的方法帮我们创建具体的类对象(汽车),生产流水线接口的具体实现
工厂:类,需要根据客户需求调用不同的流水线来生产汽车
四、代码分析
生产流水线
/** * 创建一个生产流水线接口,定义生产汽车的方法 */ public interface CarProductionLine //生产汽车的方法 void produceCar();
各个品牌汽车的生产流水线(具体产品的生产流水线)
/** * 宝马车生产流水线 */ public class BmwProductionLine implements CarProductionLine @Override public void produceCar() //实现生产流水线接口定义的方法,生产宝马车 System.out.println("整台宝马来开~");
/** * 奔驰车生产流水线 */ public class BenzProductionLine implements CarProductionLine @Override public void produceCar() //实现生产流水线接口定义的方法,生产奔驰车 System.out.println("整台奔驰来开~");
/** * 奥迪车生产流水线 */ public class AudiProductionLine implements CarProductionLine @Override public void produceCar() //实现生产流水线接口定义的方法,生产奥迪车 System.out.println("整台奥迪来开~");
工厂
/** * 汽车生产工厂 */ public class CarFactory //使用 getCar 方法调用不同的生产线 public CarProductionLine getCar(String carBrand) if (carBrand == null) return null; if (carBrand.equalsIgnoreCase("bmw")) return new BmwProductionLine(); else if (carBrand.equalsIgnoreCase("benz")) return new BenzProductionLine(); else if (carBrand.equalsIgnoreCase("audi")) return new AudiProductionLine(); return null;
客户下单
public class ConsumerOrderDemo public static void main(String[] args) CarFactory carFactory = new CarFactory(); //客户要买宝马,工厂获取 BmwProductionLine 的对象,并调用它的 getCar 方法 ProductionLine bmwProductionLine = carFactory.getCar("bmw"); //调用 BmwProductionLine 的 produceCar 方法 bmwProductionLine.produceCar();
//客户要买奔驰,工厂获取 BenzProductionLine 的对象,并调用它的 getCar 方法 ProductionLine benzProductionLine = carFactory.getCar("benz"); //调用 BenzProductionLine 的 produceCar 方法 benzProductionLine.produceCar();
//客户要买奥迪,工厂获取 AudiProductionLine 的对象,并调用它的 getCar 方法 ProductionLine audiProductionLine = carFactory.getCar("audi"); //调用 AudiProductionLine 的 produceCar 方法 audiProductionLine.produceCar();
以上是关于创建型设计模式工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章