介绍

核心作用

定义一个用于创建产品的接口,由子类决定生产什么产品。

分类

  1. 简单工厂模式
  2. 工厂方法模式
  3. 抽象工厂模式

    简单工厂模式

    优势劣势

  • 简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数不同来返回不同的对象实例
  • 对于增加新产品(新功能)无能为力!不修改代码的话,是无法扩展的。不满足开闭原则

    Car 接口

    ```java package factory.simple;

/**

  • @author SIMBA1949
  • @date 2019/6/6 10:49 */ public interface Car {

    void run(); } ```

    Audi 类实现 Car 接口

    ```java package factory.simple;

/**

  • @author SIMBA1949
  • @date 2019/6/6 10:50 */ public class Audi implements Car { public void run() {
    1. System.out.println("audi running");
    } } ```

    Lamborghini 类实现 Car 接口

    ```java package factory.simple;

/**

  • @author SIMBA1949
  • @date 2019/6/6 10:51 */ public class Lamborghini implements Car { public void run() {
    1. System.out.println("Lamborghini running");
    } } ```

    简单工厂 SimpleFactory

    ```java package factory.simple;

/**

  • 简单工厂模式(静态工厂模式) *
  • @author SIMBA1949
  • @date 2019/6/6 10:42 */ public class SimpleFactory {

    public static Car buildCar(String carType){

    1. if ("audi".equalsIgnoreCase(carType)){
    2. return new Audi();
    3. }else if("lamborghini".equalsIgnoreCase(carType)){
    4. return new Lamborghini();
    5. }
    6. return null;

    } } ```

    工厂方法模式

    抽象工厂接口

    ```java package factory.method;

/**

  • @author SIMBA1949
  • @date 2019/6/6 11:04 */ public interface MethodFactory {

    Car buildCar(); } ```

    Car 接口

    ```java package factory.method;

/**

  • @author SIMBA1949
  • @date 2019/6/6 10:49 */ public interface Car {

    void run(); } ```

    Audi 类实现 Car 接口

    ```java package factory.method;

/**

  • @author SIMBA1949
  • @date 2019/6/6 10:50 */ public class Audi implements Car { public void run() {
    1. System.out.println("audi running");
    } } ```

    AudiFactory 工厂类实现抽象工厂接口

    ```java package factory.method;

/**

  • @author SIMBA1949
  • @date 2019/6/6 11:04 */ public class AudiFactory implements MethodFactory { public Car buildCar() {
    1. return new Audi();
    } } ```

    Lamborghini 类实现 Car 接口

    ```java package factory.method;

/**

  • @author SIMBA1949
  • @date 2019/6/6 10:51 */ public class Lamborghini implements Car { public void run() {
    1. System.out.println("Lamborghini running");
    } } ```

    Lamborghini 工厂类实现抽象工厂接口

    ```java package factory.method;

/**

  • @author SIMBA1949
  • @date 2019/6/6 11:04 */ public class LamborghiniFactory implements MethodFactory { public Car buildCar() {
    1. return new Lamborghini();
    } } ```

    Client 测试

    ```java package factory.method;

/**

  • @author SIMBA1949
  • @date 2019/6/6 11:05 */ public class MethodFactoryClient { public static void main(String[] args) {
    1. Car audi = new AudiFactory().buildCar();
    2. Car lamborghini = new LamborghiniFactory().buildCar();
    } } ```