码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-07-21 18:55:28      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:demo   ase   一个   lse   dem   怎么   getc   err   部分   

一、一句话背景

我需要一辆汽车,那我可以直接从工厂里面提货,而不用去管汽车是怎么做出来的,以及生产汽车的具体实现,我只需要告诉这个工厂要生产什么品牌的汽车就好,具体的汽车生产流水线我也不用管。

二、使用场景

知道部分特性而创建具体对象的场景。

如:根据环境类型(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();
} }

 

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

标签:demo   ase   一个   lse   dem   怎么   getc   err   部分   

原文地址:https://www.cnblogs.com/riches/p/11198488.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!