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

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

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

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

工厂方法模式的实现

抽象工厂接口:

具体工厂

咖啡店类

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

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

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

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

相关推荐
杨充6 小时前
10.可测试性实战设计
设计模式·开源·代码规范
杨充6 小时前
9.重构十二式的实战
设计模式·开源·代码规范
杨充6 小时前
6.设计原则的全景图
设计模式·开源·全栈
杨充6 小时前
2.面向对象的特性
设计模式
杨充6 小时前
7.SOLID原则案例汇
设计模式·开源·全栈
杨充6 小时前
8.反模式与坏味道
设计模式·开源·代码规范
杨充7 小时前
3.接口vs抽象类比较
设计模式
咖啡八杯10 小时前
文法、BNF与AST
java·设计模式·解释器模式·ast·文法
咖啡八杯18 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式