Entwurfsmuster (2) Einfaches Fabrikmuster

Einfaches Fabrikmuster

Das Kreationsmodell konzentriert sich auf den Prozess des Erstellens von Objekten und wird häufig in der Softwareentwicklung verwendet. Der Erstellungsmodus beschreibt, wie die Erstellung und Verwendung von Objekten getrennt wird, sodass Benutzer sich bei der Verwendung von Objekten nicht um die Details der Objekterstellung kümmern müssen, wodurch der Grad der Systemkopplung verringert und das System einfach geändert werden kann und erweitern.
Das einfache Fabrikmuster ist eines der einfachsten Entwurfsmuster, wird jedoch auch häufig angewendet und ist auch die Grundlage für den Rest der Erstellungsmuster. Daher ist es erforderlich, zuerst das einfache Fabrikmuster zu lernen.

Der grundlegende Realisierungsprozess des einfachen Fabrikmodells

Aus dem obigen Beispiel lässt sich der Implementierungsprozess einer einfachen Factory leicht zusammenfassen:

  1. Entwerfen Sie eine abstrakte Produktklasse, die die Implementierung einiger öffentlicher Methoden enthält.
  2. Leiten Sie eine Reihe spezifischer Produktkategorien aus abstrakten Produktkategorien ab, z. B. Basketball, Fußball, Volleyball und bestimmte Produktkategorien, um bestimmte Codes für die Produktproduktion zu erhalten.
  3. Entwerfen einer Factory-Klasse Die Factory-Klasse bietet eine Factory-Methode zum Herstellen verschiedener Produkte. Diese Methode erstellt verschiedene spezifische Produktklassenobjekte gemäß den Eingabeparametern (Produktname).
  4. Kunden müssen nur die Factory-Methode der Factory-Klasse aufrufen und bestimmte Produktparameter übergeben, um ein bestimmtes Produktobjekt zu erhalten.
需求
客户
工厂
排球
足球
篮球

Wie in der obigen Abbildung gezeigt, legt der Kunde dem Werk seine eigenen Bedürfnisse vor, und das Werk produziert entsprechende Produkte gemäß den Bedürfnissen des Kunden. Der Kunde muss den spezifischen Produktionsprozess des Produkts nicht verstehen.
Wie oben kann der Implementierungsprozess des einfachen Fabrikmusters leicht abgeleitet werden:

  1. Entwerfen Sie eine abstrakte Produktklasse, die die Implementierung einiger öffentlicher Methoden enthält.
  2. Leiten Sie eine Reihe spezifischer Produktkategorien aus abstrakten Produktkategorien ab, z. B. Basketball, Fußball, Volleyball und bestimmte Produktkategorien, um bestimmte Codes für die Produktproduktion zu erhalten.
  3. Entwerfen einer Factory-Klasse Die Factory-Klasse bietet eine Factory-Methode zum Herstellen verschiedener Produkte. Diese Methode erstellt verschiedene spezifische Produktklassenobjekte gemäß den Eingabeparametern (Produktname).
  4. Kunden müssen nur die Factory-Methode der Factory-Klasse aufrufen und bestimmte Produktparameter übergeben, um ein bestimmtes Produktobjekt zu erhalten.

Wie aus der Definition und den Beispielen des einfachen Fabrikmusters ersichtlich ist, gibt es im einfachen Fabrikmuster ungefähr drei Rollen:

  • Fabrik: Erstellen Sie bestimmte Produktinstanzen basierend auf den Parametern bestimmter Produktkategorien, die von Kunden bereitgestellt werden.
  • Abstraktes Produkt (AbstractProduct): Die Basisklasse einer bestimmten Produktklasse, einschließlich öffentlicher Methoden zum Erstellen von Produkten.
  • Konkretes Produkt (ConcreteProduct): Eine abgeleitete Klasse abstrakter Produkte, einschließlich spezifischer Implementierungsmethoden für bestimmte Produkte, und ist das Ziel des einfachen Fabrikmusters.

Das UML-Klassendiagramm des einfachen Factory-Musters lautet wie folgt: Das
Fügen Sie hier eine Bildbeschreibung ein
vorherige Beispiel oben:

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

Führen Sie nach der Kompilierung die Ausgabe aus:

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

Zusammenfassung des einfachen Fabrikmusters

Die Vorteile des einfachen Werksmodells sind:

  1. Die Factory-Klasse bietet Methoden zum Erstellen bestimmter Produkte und enthält eine bestimmte Beurteilungslogik, sodass Kunden nicht am Produkterstellungsprozess teilnehmen müssen.
  2. Kunden müssen nur die Parameter des entsprechenden Produkts kennen. Die Parameter sind im Allgemeinen einfach und leicht zu merken, z. B. Zahlen, Zeichen oder Zeichenfolgen.

Natürlich weist das einfache Fabrikmodell offensichtliche Mängel auf. Angenommen, Jungle möchte eines Tages Baseball spielen, fühlt es sich normalerweise sehr einfach an, leitet dann eine Baseballklasse aus der abstrakten Produktklasse ab und fügt der getSportProduct-Methode der Factory-Klasse einen bedingten Zweig von "productName ==" Baseball "hinzu
wahr . , Aber das verstößt offensichtlich das Prinzip des Öffnens und Schließens (offen für die Erweiterung, für die Änderung geschlossen), das heißt, wenn die Funktion erweitert wird, wird der vorhandene Code geändert. Auf der anderen Seite, die alle das Urteil Logik der einfachen Werksmodell wird in der Werksklasse einmal implementiert. Wenn das Werksdesign fehlschlägt, ist das gesamte System betroffen!

Ich denke du magst

Origin blog.csdn.net/qq_24649627/article/details/115002728
Empfohlen
Rangfolge