创建型设计模式工厂方法模式

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();
 

 

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

创建型模式 工厂模式

设计模式——创建型模式之工厂方法模式

JavaScript设计模式创建型设计模式--简单工厂工厂方法抽象工厂

Java设计模式(创建型:工厂方法模式)

工厂方法模式 创建型 设计模式

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