设计模型|工厂方法模式

Yeren Lv3

定义

工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

动机

现在对该系统进行修改,不再设计一个按钮工厂类来统一负责所有产品的创建,而是将具体按钮的创建过程交给专门的工厂子类去完成,我们先定义一个抽象的按钮工厂类,再定义具体的工厂类来生成圆形按钮、矩形按钮、菱形按钮等,它们实现在抽象按钮工厂类中定义的方法。这种抽象化的结果使这种结构可以在不修改具体工厂类的情况下引进新的产品,如果出现新的按钮类型,只需要为这种新类型的按钮创建一个具体的工厂类就可以获得该新按钮的实例,这一特点无疑使得工厂方法模式具有超越简单工厂模式的优越性,更加符合“开闭原则”。

设计类图

fig

结构

  • Product:抽象产品
  • ConcreteProduct:具象产品
  • Factory:抽象工厂
  • ConcreteFactory:具象工厂

样例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package DesignPattern;

interface Factory{
Product createProduct();
}

class FactoryA implements Factory{
@Override
public Product createProduct() {
return new ProductA();
}
}

class FactoryB implements Factory{
@Override
public Product createProduct() {
return new ProductB();
}
}

interface Product{
void operation();
}

class ProductA implements Product{
@Override
public void operation() {
System.out.println("this is productA");
}
}

class ProductB implements Product{
@Override
public void operation() {
System.out.println("this is productB");
}
}

public class FactoryMethod {
public static void main(String[] args) {
Factory factoryA = new FactoryA();
Product productA = factoryA.createProduct();
productA.operation();
Factory factoryB = new FactoryB();
Product productB = factoryB.createProduct();
productB.operation();
}
}

总结分析

  • 工厂方法模式又称为工厂模式,虚拟构造器模式。工厂方法中父类负责定义创建产品的统一接口,工厂子类负责生成具体的产品类。将产品的实例化操作延迟到子类进行,由子类决定实例化哪一个具体的产品类。
  • 工厂方法模式包含四个角色:抽象工厂具象工厂抽象产品具象产品
  • 工厂方法模式是简单工厂的进一步的抽象和推广,它们都是集中封装了对象的创建,使得更换对象时不需要做大的改动就可以实现,降低了客户端程序与产品对象的耦合。但是由于工厂方法模式使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。
  • 工厂方法模式的主要优点是增加新的产品类时无须修改现有系统,并封装了产品对象的创建细节,系统具有良好的灵活性和可扩展性;其缺点在于增加新产品的同时需要增加新的工厂,导致系统类的个数成对增加,在一定程度上增加了系统的复杂性。
  • 工厂方法模式适用情况包括:一个类不知道它所需要的对象的类;一个类通过其子类来指定创建哪个对象;将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定。
  • Title: 设计模型|工厂方法模式
  • Author: Yeren
  • Created at : 2023-08-19 00:00:00
  • Updated at : 2023-08-19 00:00:00
  • Link: https://blog.yeren.xyz/2023/08/19/DP-factory-method-pattern/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
设计模型|工厂方法模式