Modèle de conception (2) Modèle d'usine simple

Modèle d'usine simple

Le modèle de création se concentre sur le processus de création d'objets et est largement utilisé dans le développement de logiciels. Le mode de création décrit comment séparer la création et l'utilisation d'objets, de sorte que les utilisateurs n'aient pas besoin de se soucier des détails de la création d'objet lors du processus d'utilisation des objets, réduisant ainsi le degré de couplage du système et rendant le système facile à modifier. et se développer.
Le modèle d'usine simple est l'un des modèles de conception les plus simples, mais il est également fréquemment appliqué et constitue également la base du reste des modèles de création.Il est donc nécessaire d'apprendre d'abord le modèle d'usine simple.

Le processus de réalisation de base du modèle d'usine simple

À partir de l'exemple ci-dessus, il est facile de résumer le processus de mise en œuvre d'une usine simple:

  1. Concevoir une classe de produit abstraite, qui contient l'implémentation de certaines méthodes publiques;
  2. Dériver un certain nombre de catégories de produits spécifiques à partir de catégories de produits abstraites, telles que le basket-ball, le football, le volleyball et des catégories de produits spécifiques pour obtenir des codes spécifiques liés à la production de produits;
  3. Concevoir une classe d'usine. La classe d'usine fournit une méthode d'usine pour produire divers produits. Cette méthode crée différents objets de classe de produit spécifiques en fonction des paramètres d'entrée (nom du produit);
  4. Les clients doivent uniquement appeler la méthode d'usine de la classe d'usine et transmettre des paramètres de produit spécifiques pour obtenir un objet de produit spécifique.
需求
客户
工厂
排球
足球
篮球

Comme le montre la figure ci-dessus, le client présente ses propres besoins à l'usine et l'usine fabrique les produits correspondants en fonction des besoins du client.Le client n'a pas besoin de comprendre le processus de production spécifique du produit.
Comme ci-dessus, le processus de mise en œuvre du modèle d'usine simple peut être facilement dérivé:

  1. Concevoir une classe de produit abstraite, qui contient l'implémentation de certaines méthodes publiques;
  2. Dériver un certain nombre de catégories de produits spécifiques à partir de catégories de produits abstraites, telles que le basket-ball, le football, le volleyball et des catégories de produits spécifiques pour obtenir des codes spécifiques liés à la production de produits;
  3. Concevoir une classe d'usine. La classe d'usine fournit une méthode d'usine pour produire divers produits. Cette méthode crée différents objets de classe de produit spécifiques en fonction des paramètres d'entrée (nom du produit);
  4. Les clients doivent uniquement appeler la méthode d'usine de la classe d'usine et transmettre des paramètres de produit spécifiques pour obtenir un objet de produit spécifique.

Comme on peut le voir à partir de la définition et des exemples du modèle d'usine simple, il y a environ trois rôles dans le modèle d'usine simple:

  • Usine: créer des instances de produits spécifiques en fonction des paramètres de catégories de produits spécifiques fournis par les clients;
  • Abstract Product (AbstractProduct): la classe de base d'une classe de produit spécifique, y compris les méthodes publiques de création de produits;
  • Produit en béton (ConcreteProduct): Une classe dérivée de produits abstraits, y compris des méthodes de mise en œuvre spécifiques pour des produits spécifiques, et est l'objectif du modèle d'usine simple.

Le diagramme de classes UML du modèle de fabrique simple est le suivant: L'
Insérez la description de l'image ici
exemple précédent ci-dessus:

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;
}

Après la compilation, exécutez la sortie:

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

Résumé du modèle d'usine simple

Les avantages du modèle d'usine simple sont:

  1. La classe d'usine fournit des méthodes pour créer des produits spécifiques et contient une certaine logique de jugement, afin que les clients n'aient pas besoin de participer au processus de création de produit;
  2. Les clients ont seulement besoin de connaître les paramètres du produit correspondant. Les paramètres sont généralement simples et faciles à retenir, tels que des nombres, des caractères ou des chaînes.

Bien sûr, le modèle d'usine simple présente des lacunes évidentes. En supposant qu'un jour Jungle veuille jouer au baseball, cela semble généralement très simple, puis dérivez une classe Baseball de la classe de produit abstraite et ajoutez une branche conditionnelle de "productName ==" Baseball "à la méthode getSportProduct de la classe d'usine. C'est
vrai . , Mais cela viole évidemment le principe d'ouverture et de fermeture (ouvert pour extension, fermé pour modification), c'est-à-dire que lorsque la fonction est étendue, le code existant est modifié. Par contre, toute la logique de jugement du simple le modèle d'usine est implémenté dans la classe d'usine, une fois Si la conception d'usine échoue, tout le système sera affecté!

Je suppose que tu aimes

Origine blog.csdn.net/qq_24649627/article/details/115002728
conseillé
Classement