Patrón de diseño (2) Patrón de fábrica simple

Patrón de fábrica simple

El modelo de creación se centra en el proceso de creación de objetos y se utiliza ampliamente en el desarrollo de software. El modo de creación describe cómo separar la creación y el uso de objetos, de modo que los usuarios no tengan que preocuparse por los detalles de la creación de objetos en el proceso de uso de objetos, lo que reduce el grado de acoplamiento del sistema y hace que el sistema sea fácil de modificar. y expandir.
El patrón de fábrica simple es uno de los patrones de diseño más simples, pero también se aplica con frecuencia, y también es la base para el resto de los patrones de creación, por lo que es necesario aprender primero el patrón de fábrica simple.

El proceso básico de realización del modelo de fábrica simple.

A partir del ejemplo anterior, es fácil resumir el proceso de implementación de una fábrica simple:

  1. Diseñar una clase de producto abstracta, que contenga la implementación de algunos métodos públicos;
  2. Derivar una serie de categorías de productos específicas a partir de categorías de productos abstractas, como baloncesto, fútbol, ​​voleibol y categorías de productos específicas para lograr códigos relacionados con la producción de productos específicos;
  3. Diseñar una clase de fábrica. La clase de fábrica proporciona un método de fábrica para producir varios productos. Este método crea diferentes objetos de clase de producto específicos de acuerdo con los parámetros de entrada (nombre del producto);
  4. Los clientes solo necesitan llamar al método de fábrica de la clase de fábrica y pasar parámetros de producto específicos para obtener un objeto de producto específico.
需求
客户
工厂
排球
足球
篮球

Como se muestra en la figura anterior, el cliente presenta sus propias necesidades a la fábrica y la fábrica produce los productos correspondientes de acuerdo con las necesidades del cliente. El cliente no necesita comprender el proceso de producción específico del producto.
Como se indicó anteriormente, el proceso de implementación del patrón de fábrica simple se puede derivar fácilmente:

  1. Diseñar una clase de producto abstracta, que contenga la implementación de algunos métodos públicos;
  2. Derivar una serie de categorías de productos específicas a partir de categorías de productos abstractas, como baloncesto, fútbol, ​​voleibol y categorías de productos específicas para lograr códigos relacionados con la producción de productos específicos;
  3. Diseñar una clase de fábrica. La clase de fábrica proporciona un método de fábrica para producir varios productos. Este método crea diferentes objetos de clase de producto específicos de acuerdo con los parámetros de entrada (nombre del producto);
  4. Los clientes solo necesitan llamar al método de fábrica de la clase de fábrica y pasar parámetros de producto específicos para obtener un objeto de producto específico.

Como puede verse en la definición y los ejemplos del patrón de fábrica simple, hay aproximadamente tres roles en el patrón de fábrica simple:

  • Fábrica: cree instancias de productos específicas basadas en los parámetros de categorías de productos específicas proporcionadas por los clientes;
  • Producto abstracto (AbstractProduct): la clase base de una clase de producto específica, incluidos los métodos públicos para crear productos;
  • Producto de hormigón (ConcreteProduct): una clase derivada de productos abstractos, que incluye métodos de implementación específicos para productos específicos, y es el objetivo del patrón de fábrica simple.

El diagrama de clases UML del patrón de fábrica simple es el siguiente: El
Inserte la descripción de la imagen aquí
ejemplo anterior anterior:

simplefactory.h

#include <iostream>
#include <string.h>

using namespace std;

//抽象产品类AbstractProduct
class AbstractSportProduct
{
    
    
public:
  AbstractSportProduct()
  {
    
    
  }
  //抽象方法:
  void printName(){
    
    };
  void play(){
    
    };
};

//具体产品类Basketball
class Basketball : public AbstractSportProduct
{
    
    
public:
  Basketball()
  {
    
    
    printName();
    play();
  }
  //具体实现方法
  void printName()
  {
    
    
    cout << "Get Basketball\n";
  }
  void play()
  {
    
    
    cout << "Play Basketball\n";
  }
};

//具体产品类Football
class Football : public AbstractSportProduct
{
    
    
public:
  Football()
  {
    
    
    printName();
    play();
  }
  //具体实现方法
  void printName()
  {
    
    
    cout << "Get Football\n";
  }
  void play()
  {
    
    
    cout << "Play Football\n";
  }
};

//具体产品类Volleyball
class Volleyball : public AbstractSportProduct
{
    
    
public:
  Volleyball()
  {
    
    
    printName();
    play();
  }
  //具体实现方法
  void printName()
  {
    
    
    cout << "Get Volleyball\n";
  }
  void play()
  {
    
    
    cout << "Play Volleyball\n";
  }
};

class Factory
{
    
    
public:
  AbstractSportProduct *getSportProduct(string productName)
  {
    
    
    AbstractSportProduct *pro = NULL;
    if (productName == "Basketball")
    {
    
    
      pro = new Basketball();
    }
    else if (productName == "Football")
    {
    
    
      pro = new Football();
    }
    else if (productName == "Volleyball")
    {
    
    
      pro = new Volleyball();
    }
    return pro;
  }
};

simplefactory.cc

#include <iostream>
#include "simplefactory.h"

using namespace std;

int main()
{
    
    
  cout << "简单工厂模式\n";

  //定义工厂类对象
  Factory *fac = new Factory();
  AbstractSportProduct *product = NULL;

  product = fac->getSportProduct("Basketball");
  if (product)
  {
    
    
    delete product;
  }

  product = fac->getSportProduct("Football");
  if (product)
  {
    
    
    delete product;
  }

  product = fac->getSportProduct("Volleyball");
  if (product)
  {
    
    
    delete product;
  }

  delete fac;

  return 0;
}

Después de la compilación, ejecute la salida:

简单工厂模式
Get Basketball
Play Basketball
Get Football
Play Football
Get Volleyball
Play Volleyball

Resumen de patrón de fábrica simple

Las ventajas del modelo de fábrica simple son:

  1. La clase de fábrica proporciona métodos para crear productos específicos y contiene cierta lógica de juicio, de modo que los clientes no necesitan participar en el proceso de creación del producto;
  2. Los clientes solo necesitan conocer los parámetros del producto correspondiente, los parámetros son generalmente simples y fáciles de recordar, como números, caracteres o cadenas.

Por supuesto, el modelo de fábrica simple tiene defectos obvios. Suponiendo que un día Jungle quiera jugar béisbol, generalmente se siente muy simple, luego deriva una clase de béisbol de la clase de producto abstracto y agrega una rama condicional de "productName ==" Baseball "al método getSportProduct de la clase de fábrica. Eso es
cierto . , Pero esto obviamente viola el principio de apertura y cierre (abierto para extensión, cerrado para modificación), es decir, cuando se extiende la función, se modifica el código existente. Por otro lado, toda la lógica de juicio del simple El modelo de fábrica se implementa en la clase de fábrica, una vez que si el diseño de fábrica falla, ¡todo el sistema se verá afectado!

Supongo que te gusta

Origin blog.csdn.net/qq_24649627/article/details/115002728
Recomendado
Clasificación