大话设计模式——6.工厂方法模式(Factory Method Pattern)

1.介绍

工厂方法模式也称工厂模式,是简单工厂模式的进一步抽象。定义一个用于创建对象的接口,使一个类的实例化延迟到其子类,让子类决定实例化哪个类。通过工厂父类定义负责创建产品的公共接口,通过子类确定所需要创建的类型。
属于创建型模式
UML图:
在这里插入图片描述

2. 示例

汽车制造工厂,代工多个品牌的汽车。

1)抽象product:Vehicle

public interface Vehicle {

    /**
     * 车辆名称
     */
    void vehicleName();
}

2)抽象factory:VehicleFactory

public interface VehicleFactory {

    /**
     * 创建实例
     *
     * @return
     */
    Vehicle createVehicle();
}

3)具体product 1:BMWVehicle

public class BMWVehicle implements Vehicle {

    @Override
    public void vehicleName() {
        System.out.println("宝马X5");
    }
}

4)具体product 2:AudiVehicle

public class AudiVehicle implements Vehicle {

    @Override
    public void vehicleName() {
        System.out.println("奥迪Q7");
    }
}

5)具体factory 1:BMWVehicleFactory

public class BMWVehicleFactory implements VehicleFactory {

    @Override
    public Vehicle createVehicle() {
        return new BMWVehicle();
    }
}

6)具体factory 2:AudiVehicleFactory

public class AudiVehicleFactory implements VehicleFactory {

    @Override
    public Vehicle createVehicle() {
        return new AudiVehicle();
    }
}

7)运行

public class Main {

    public static void main(String[] args) {

        // 工厂方法模式
        Vehicle bmwVehicle = new BMWVehicleFactory().createVehicle();
        bmwVehicle.vehicleName();
        Vehicle audiVehicle = new AudiVehicleFactory().createVehicle();
        audiVehicle.vehicleName();
    }
}

在这里插入图片描述

3.总结

1)优点:
符合6大原则,只需要知道产品的抽象类即可,无需关心其他具体实现类
2)缺点:
每个产品都需要有对应的具体产品类和具体工厂

相关推荐

  1. 大话设计模式工厂模式

    2024-03-15 00:52:02       43 阅读
  2. 大话设计模式之简单工厂模式

    2024-03-15 00:52:02       39 阅读
  3. 设计模式-工厂方法模式

    2024-03-15 00:52:02       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-15 00:52:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-15 00:52:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-15 00:52:02       82 阅读
  4. Python语言-面向对象

    2024-03-15 00:52:02       91 阅读

热门阅读

  1. sql语句

    2024-03-15 00:52:02       39 阅读
  2. 零基础入门多媒体音频(1)-音频基础

    2024-03-15 00:52:02       43 阅读
  3. go的slice学习

    2024-03-15 00:52:02       41 阅读
  4. 分布式锁解决方案

    2024-03-15 00:52:02       40 阅读
  5. Easy Conan + CMake template for C++ projects

    2024-03-15 00:52:02       43 阅读
  6. MFC 实现延时,并且进行消息分发,不阻塞

    2024-03-15 00:52:02       43 阅读
  7. 【C++】vector的底层剖析以及模拟实现

    2024-03-15 00:52:02       43 阅读
  8. 利用装饰器模式使用第三方库

    2024-03-15 00:52:02       42 阅读
  9. Vue template到render过程,以及render的调用时机

    2024-03-15 00:52:02       43 阅读