Patrón de diseño C ++ (patrón de método de fábrica)


prefacio

Este artículo le enseñará el patrón del método de fábrica en C++.

1. Introducción al patrón del método de fábrica.

El patrón de método de fábrica es un patrón de diseño creacional que se utiliza para crear objetos a través de métodos de fábrica sin especificar explícitamente sus clases concretas. Este patrón define una interfaz que crea objetos, pero difiere la creación de objetos específicos a sus subclases. Esto puede separar la creación y el uso de objetos y mejorar la flexibilidad y escalabilidad del código.

Diagrama de estructura UML:

Insertar descripción de la imagen aquí

2. Comparación entre el patrón del método de fábrica y el patrón de fábrica simple

1. Método de implementación:

Patrón de fábrica simple: una clase de fábrica es responsable de crear objetos y determina qué objeto específico crear en función de los parámetros o condiciones pasados. Es equivalente a una clase de fábrica que centraliza toda la lógica de creación de productos.
Patrón de método de fábrica: retrasa la creación de objetos en subclases. Cada producto específico tiene una clase de fábrica correspondiente responsable de crear el producto. Cada clase de fábrica sólo es responsable de crear un producto específico.

2. Flexibilidad y escalabilidad:

Modo de fábrica simple: administre centralmente la creación de objetos a través de una clase de fábrica. Al agregar nuevos productos, es necesario modificar el código de la clase de fábrica, lo que no cumple con el principio de apertura y cierre (abierto para extensión, cerrado para modificación) .
Patrón de método de fábrica: cada producto específico tiene una clase de fábrica correspondiente. Al agregar un nuevo producto, solo necesita agregar un nuevo producto específico y la clase de fábrica correspondiente, y no es necesario modificar el código existente. Cumplir con el principio de apertura y cierre.

3. Grado de acoplamiento:

Patrón de fábrica simple: el código del cliente debe depender de la clase de fábrica y crear instancias de productos específicos a través de la clase de fábrica.
Patrón de método de fábrica: el código del cliente se basa en fábricas abstractas y clases de productos abstractos, y crea instancias de productos específicos a través de fábricas abstractas. El código del cliente está desacoplado de las clases de fábrica concretas y de las clases de productos concretas.

4. Número de clases:

Patrón de fábrica simple: solo se necesita una clase de fábrica para crear todos los productos, y la clase de fábrica puede volverse muy grande.
Patrón de método de fábrica: cada producto específico tiene una clase de fábrica correspondiente. El número de clases es mayor que el del patrón de fábrica simple, pero puede gestionar la creación de objetos de una manera más detallada.

3. Escenarios aplicables del patrón del método de fábrica

1. La creación de objetos debe seguir una interfaz específica o una clase abstracta: el patrón del método de fábrica es adecuado para crear un grupo de objetos relacionados que comparten una interfaz común o una clase abstracta. Al definir fábricas abstractas y clases de fábrica concretas, puede asegurarse de que los objetos creados se ajusten a la definición de la misma interfaz o clase abstracta.

2. El objeto específico que se creará debe ser determinado por la subclase: el patrón del método de fábrica retrasa la creación del objeto en la subclase, y la subclase puede elegir qué objeto específico implementar en función de las necesidades específicas. Esto le permite agregar o cambiar dinámicamente tipos de objetos específicos sin modificar el código del cliente.

3. Es necesario agregar nuevos productos mediante extensión: si es necesario agregar nuevos productos al sistema, el patrón del método de fábrica puede proporcionar un mecanismo de extensión para facilitar la adición de nuevos productos. Solo necesita crear nuevas clases de productos concretos y las clases de fábrica concretas correspondientes sin modificar el código existente.

4. Es necesario desacoplar el acoplamiento entre el código del cliente y productos específicos: al introducir fábricas abstractas y clases de fábrica concretas, el patrón del método de fábrica puede desacoplar el código del cliente del proceso de creación de productos específicos. El cliente solo necesita confiar en la fábrica abstracta y la clase de producto abstracto, y no necesita crear directamente objetos específicos por sí mismo, lo que reduce el grado de acoplamiento.

4. Código de muestra del patrón del método de fábrica

#include <iostream>
#include <string>

// 抽象产品类
class Product {
    
    
public:
    virtual void use() const = 0;
};

// 具体产品类 A
class ConcreteProductA : public Product {
    
    
public:
    void use() const override {
    
    
        std::cout << "Using ConcreteProductA" << std::endl;
    }
};

// 具体产品类 B
class ConcreteProductB : public Product {
    
    
public:
    void use() const override {
    
    
        std::cout << "Using ConcreteProductB" << std::endl;
    }
};

// 抽象工厂类
class Factory {
    
    
public:
    virtual Product* createProduct() const = 0;
};

// 具体工厂类 A
class ConcreteFactoryA : public Factory {
    
    
public:
    Product* createProduct() const override {
    
    
        return new ConcreteProductA();
    }
};

// 具体工厂类 B
class ConcreteFactoryB : public Factory {
    
    
public:
    Product* createProduct() const override {
    
    
        return new ConcreteProductB();
    }
};

int main() {
    
    
    // 使用具体工厂类 A 创建产品对象
    Factory* factoryA = new ConcreteFactoryA();
    Product* productA = factoryA->createProduct();
    productA->use();

    delete productA;
    delete factoryA;

    // 使用具体工厂类 B 创建产品对象
    Factory* factoryB = new ConcreteFactoryB();
    Product* productB = factoryB->createProduct();
    productB->use();

    delete productB;
    delete factoryB;

    return 0;
}

Resumir

Este artículo lo explicará aquí.

Supongo que te gusta

Origin blog.csdn.net/m0_49476241/article/details/132482670
Recomendado
Clasificación