工厂模式(Factory Pattern)

简介: 工厂模式(Factory Pattern)

工厂模式(Factory Pattern)

工厂模式(Factory Pattern)是一种创建型设计模式,旨在封装对象的创建过程,通过工厂方法创建对象,而不是在代码中直接使用构造函数。

作用:

  • 将对象的创建过程与使用者分离,客户端只需要通过工厂方法获取对象,无需了解具体的创建细节。
  • 提供了一种灵活的方式来创建对象,可以根据需求动态地选择创建哪种类型的对象。

优势:

  • 降低耦合度:使用工厂模式可以将对象的创建与使用解耦,客户端只与工厂接口交互,而不需要知道具体的实现类。
  • 提供了扩展性:通过增加新的工厂实现类,可以轻松地扩展系统的功能,添加新的产品类型,而无需修改客户端代码。
  • 封装复杂的创建逻辑:某些对象的创建过程可能非常复杂,包括多个步骤或依赖关系,工厂模式可以将这些复杂的创建逻辑封装在工厂中,提供简单的接口给客户端使用。

适用场景:

  • 对象的创建过程复杂:当对象的创建涉及复杂的逻辑、依赖关系或多个步骤时,可以使用工厂模式来封装创建过程,使客户端代码更加简洁。
  • 需要灵活扩展对象的创建:当需要在系统中动态添加新的产品类型,而不希望修改现有代码时,可以使用工厂模式来添加新的工厂实现类,实现对象的动态创建。

以下是一些常见的工厂模式的变体:

  • 简单工厂模式:使用一个工厂类来创建不同类型的对象,根据传入的参数或条件判断来确定创建哪种类型的对象。
  • 工厂方法模式:将对象的创建交给具体的工厂类,每个具体工厂类负责创建一种具体类型的对象,客户端通过调用不同的工厂方法来获取不同类型的对象。
  • 抽象工厂模式:提供一个接口或抽象类,定义了一系列工厂方法,每个工厂方法负责创建一组相关的对象,客户端可以通过具体工厂类来创建一系列相关的对象。

工厂模式在很多场景中都有广泛的应用,特别是当需要将对象的创建过程封装起来,提供灵活性和扩展性时,工厂模式是一个常见且有效的设计模式。

代码举例说明

以下是简单工厂模式、工厂方法模式和抽象工厂模式的代码示例:

简单工厂模式:

// 抽象产品
interface Product {
    void operation();
}

// 具体产品A
class ConcreteProductA implements Product {
    @Override
    public void operation() {
        System.out.println("ConcreteProductA operation");
    }
}

// 具体产品B
class ConcreteProductB implements Product {
    @Override
    public void operation() {
        System.out.println("ConcreteProductB operation");
    }
}

// 简单工厂类
class SimpleFactory {
    public static Product createProduct(String type) {
        if (type.equals("A")) {
            return new ConcreteProductA();
        } else if (type.equals("B")) {
            return new ConcreteProductB();
        }
        return null;
    }
}

// 客户端使用
public class Client {
    public static void main(String[] args) {
        Product productA = SimpleFactory.createProduct("A");
        productA.operation();

        Product productB = SimpleFactory.createProduct("B");
        productB.operation();
    }
}

工厂方法模式:

// 抽象产品
interface Product {
    void operation();
}

// 具体产品A
class ConcreteProductA implements Product {
    @Override
    public void operation() {
        System.out.println("ConcreteProductA operation");
    }
}

// 具体产品B
class ConcreteProductB implements Product {
    @Override
    public void operation() {
        System.out.println("ConcreteProductB operation");
    }
}

// 抽象工厂
interface Factory {
    Product createProduct();
}

// 具体工厂A
class ConcreteFactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

// 具体工厂B
class ConcreteFactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

// 客户端使用
public class Client {
    public static void main(String[] args) {
        Factory factoryA = new ConcreteFactoryA();
        Product productA = factoryA.createProduct();
        productA.operation();

        Factory factoryB = new ConcreteFactoryB();
        Product productB = factoryB.createProduct();
        productB.operation();
    }
}

抽象工厂模式:

// 抽象产品A
interface ProductA {
    void operation();
}

// 具体产品A1
class ConcreteProductA1 implements ProductA {
    @Override
    public void operation() {
        System.out.println("ConcreteProductA1 operation");
    }
}

// 具体产品A2
class ConcreteProductA2 implements ProductA {
    @Override
    public void operation() {
        System.out.println("ConcreteProductA2 operation");
    }
}

// 抽象产品B
interface ProductB {
    void operation();
}

// 具体产品B1
class ConcreteProductB1 implements ProductB {
    @Override
    public void operation() {
        System.out.println("ConcreteProductB1 operation");
    }
}

// 具体产品B2
class ConcreteProductB2 implements ProductB {
    @Override
    public void operation() {
        System.out.println("ConcreteProductB2 operation");
    }
}

// 抽象工厂
interface AbstractFactory {
    ProductA createProductA();
    ProductB createProductB();
}

//
相关文章
|
10月前
|
设计模式 Linux 开发者
抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)也是一种创建型设计模式,它提供了一种方式,可以创建一系列相互关联或相互依赖的对象,而不需要指定它们的具体类。
74 1
|
8月前
|
设计模式
设计模式5 - 工厂方法模式【Factory Method Pattern】
设计模式5 - 工厂方法模式【Factory Method Pattern】
22 0
|
8月前
|
设计模式 Java
设计模式6 - 抽象工厂模式【Abstract Factory Pattern】
设计模式6 - 抽象工厂模式【Abstract Factory Pattern】
24 0
|
10月前
|
设计模式 Java 数据库连接
工厂模式(Factory Pattern)
工厂模式(Factory Pattern)是一种常用的设计模式,它提供了一种创建对象的方式,可以根据不同的需求,动态地创建不同类型的对象。
67 1
|
10月前
|
设计模式 数据库 uml
3W2H学设计模式- 工厂模式(Factory Pattern)
3W2H学设计模式- 工厂模式(Factory Pattern)
104 0
|
10月前
|
设计模式
【3W2H设计模式】抽象工厂模式(Abstract Factory Pattern)
【3W2H设计模式】抽象工厂模式(Abstract Factory Pattern)
119 0
|
设计模式 XML Java
Java设计模式-工厂模式(FactoryPattern)
Java设计模式-工厂模式(FactoryPattern)
|
设计模式 Java
工厂模式(Factory Pattern)(三)
工厂模式(Factory Pattern)是Java中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的绝佳方式。
93 2
工厂模式(Factory Pattern)(三)
|
设计模式 Java
工厂模式(Factory Pattern)(一)
工厂模式(Factory Pattern)是Java中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的绝佳方式。
92 1
工厂模式(Factory Pattern)(一)
|
设计模式 Java API
工厂模式(Factory Pattern)(二)
工厂模式(Factory Pattern)是Java中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的绝佳方式。
92 1
工厂模式(Factory Pattern)(二)