创建型设计模式抽象工厂模式

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;
    

 

以上是关于创建型设计模式抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

6创建型模式之工厂模式与抽象工厂模式

设计模式之抽象工厂模式(创建型)

设计模式-简单工厂模式工厂模式抽象工厂模式-(创建型模式)

设计模式01 创建型模式 - 抽象工厂

设计模式——创建型模式之抽象工厂模式

浅析设计模式——创建型模式之Abstract-Factory(抽象工厂模式)