标签:car 颜色 ace div 品牌 case cas etc 需要
假如我是一个汽车经销商,那我不光是卖车,也得卖相关的配件吧,比如润滑油,轮胎之类的,那我能不能整一个抽象的工厂,我需要啥直接告诉这个抽象工厂,具体生产哪一类产品让这个抽象工厂自己去对接,这样我不管需要啥都只用找这个抽象工厂的负责人就可以,而不用找每一类具体产品工厂的负责人,我可就省事多了~
调用一整套产品族的场景。
如:参加不同类型的抽奖活动,QQ换皮肤
生产流水线:接口,定义生产具体产品的方法
具体产品的生产流水线:类,定义生产具体特征(颜色,品牌等)产品的方法,生产流水线接口的具体实现
工厂:类,需要根据客户需求调用不同的流水线来生产具体产品
抽象工厂:抽象类,负责对接各类产品的工厂
/** * 创建一个生产流水线接口,定义生产汽车的方法 */ public interface CarProductionLine{ //生产汽车的方法 void produceCar(); }
/** * 创建一个生产流水线接口,定义生产轮胎的方法 */ public interface TireProductionLine{ //生产轮胎的方法 void produceTire(); }
/** * 宝马车生产流水线 */ 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 MQLProductionLine implements TireProductionLine { @Override public void produceTire() { //实现生产流水线接口定义的方法,生产米其林轮胎 System.out.println("生产米其林轮胎~"); } }
/** * 固特异轮胎生产流水线 */ public class GTYProductionLine implements TireProductionLine { @Override public void produceTire() { //实现生产流水线接口定义的方法,生产固特异轮胎 System.out.println("生产固特异轮胎~"); } }
/** * 汽车生产工厂 */ public class CarFactory extends AbstractFactory { //使用 getCar 方法调用不同的生产线 @Override 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; } @Override public TireProductionLine getTire(String tireBrand) { return null; } }
/** * 轮胎生产工厂 */ public class TireFactory extends AbstractFactory { @Override public CarProductionLine getCar(String carBrand) { return null; } //使用 getTire 方法调用不同的生产线 @Override public TireProductionLine getTire(String tireBrand) { if (tireBrand == null) { return null; } if (tireBrand.equalsIgnoreCase("mql")) { return new MQLProductionLine(); } else if (tireBrand.equalsIgnoreCase("gty")) { return new GTYProductionLine(); } return null; } }
/** * 抽象工厂,定义了调用工厂的方法 */ public abstract class AbstractFactory { public abstract CarProductionLine getCar(String carBrand); public abstract TireProductionLine getTire(String tireBrand); }
/** * 工厂生成器 */ public class FactoryProducer { public static AbstractFactory getFactory(String choice) { if (choice.equalsIgnoreCase("car")) { return new CarFactory(); } else if (choice.equalsIgnoreCase("tire")) { return new TireFactory(); } return null; } }
标签:car 颜色 ace div 品牌 case cas etc 需要
原文地址:https://www.cnblogs.com/riches/p/11200185.html