一、一句话背景
我需要一辆汽车,那我可以直接从工厂里面提货,而不用去管汽车是怎么做出来的,以及生产汽车的具体实现,我只需要告诉这个工厂要生产什么品牌的汽车就好,具体的汽车生产流水线我也不用管。
二、使用场景
知道部分特性而创建具体对象的场景。
如:根据环境类型(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();
} }
原文地址:https://www.cnblogs.com/riches/p/11198488.html
时间: 2024-11-09 03:47:55