创建型设计模式抽象工厂模式
Posted riches
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建型设计模式抽象工厂模式相关的知识,希望对你有一定的参考价值。
一、一句话背景
假如我是一个汽车经销商,那我不光是卖车,也得卖相关的配件吧,比如润滑油,轮胎之类的,那我能不能整一个抽象的工厂,我需要啥直接告诉这个抽象工厂,具体生产哪一类产品让这个抽象工厂自己去对接,这样我不管需要啥都只用找这个抽象工厂的负责人就可以,而不用找每一类具体产品工厂的负责人,我可就省事多了~
二、使用场景
调用一整套产品族的场景。
如:参加不同类型的抽奖活动,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;
以上是关于创建型设计模式抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章