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

和简单工厂模式中工厂负责生产所有产品相比,工厂方法模式将生成具体产品的任务分发给具体的产品工厂,定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象。

工厂方法模式的主要角色:

  • 抽象工厂(AbstractFactory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。
  • 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
  • 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
  • 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。

工厂方法模式的实现

抽象工厂接口:

具体工厂

咖啡店类

从以上的编写的代码可以看到,要增加产品类时也要相应地增加工厂类,不需要修改工厂接口的代码了,这样就解决了简单工厂模式的缺点。

工厂方法模式是简单工厂模式的进一步抽象。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。

优点:用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则:

缺点:每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

相关推荐

  1. 设计模式-创建模式-工厂方法模式

    2024-07-16 04:46:06       43 阅读
  2. GO设计模式——2、工厂方法模式创建

    2024-07-16 04:46:06       57 阅读

最近更新

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

    2024-07-16 04:46:06       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 04:46:06       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 04:46:06       57 阅读
  4. Python语言-面向对象

    2024-07-16 04:46:06       68 阅读

热门阅读

  1. Deep Layer Aggregation【方法部分解读】

    2024-07-16 04:46:06       25 阅读
  2. Chrome调试工具

    2024-07-16 04:46:06       22 阅读
  3. 探索Mojo编程语言:AI开发者的新宠儿

    2024-07-16 04:46:06       26 阅读
  4. C++:++和--运算符的前置后置如何实现

    2024-07-16 04:46:06       21 阅读
  5. - vuex路由:

    2024-07-16 04:46:06       22 阅读
  6. 数据流通环节如何规避安全风险

    2024-07-16 04:46:06       20 阅读
  7. Linux0715

    Linux0715

    2024-07-16 04:46:06      21 阅读
  8. SQL日期函数

    2024-07-16 04:46:06       24 阅读
  9. Integrated Gradients (Pytorch)refs

    2024-07-16 04:46:06       24 阅读
  10. ICPC铜牌算法

    2024-07-16 04:46:06       21 阅读
  11. centos7中MySQL的卸载

    2024-07-16 04:46:06       23 阅读
  12. Go语言入门之流程控制简述

    2024-07-16 04:46:06       29 阅读