Middle
Was ist der Unterschied zwischen dem 'Fabrik'-Muster und der 'Fabrikmethode'?
sobes.tech KI
Antwort von AI
Das "Fabrik"-Muster (Simple Factory) ist verantwortlich für die Erstellung von Objekten eines Typs, wobei die Logik ihrer Instanziierung verborgen bleibt. Es ist eine separate Klasse oder eine statische Funktion, die basierend auf den Eingabeparametern ein konkretes Objekt erstellt und zurückgibt.
<?php
class ProductA {}
class ProductB {}
class ProductFactory
{
public static function createProduct(string $type)
{
switch ($type) {
case 'A':
return new ProductA();
case 'B':
return new ProductB();
default:
throw new \InvalidArgumentException("Ungültiger Produkttyp");
}
}
}
Das "Fabrikationsmuster" (Factory Method) ist ein Erzeugungsmuster, das eine Schnittstelle zur Erstellung eines Objekts definiert, aber Unterklassen entscheiden lässt, welche Klasse instanziiert wird. Es überträgt die Verantwortung für die Objekterstellung auf die Unterklassen.
<?php
interface Product
{
public function operation(): string;
}
class ConcreteProductA implements Product
{
public function operation(): string
{
return "Ergebnis von ConcreteProductA";
}
}
class ConcreteProductB implements Product
{
public function operation(): string
{
return "Ergebnis von ConcreteProductB";
}
}
abstract class Creator
{
abstract public function factoryMethod(): Product;
public function someOperation(): string
{
// Rufe die Fabrikmethode auf, um ein Produkt zu erstellen.
$product = $this->factoryMethod();
// Jetzt, benutze das Produkt.
return "Creator: Der gleiche Code des Erstellers hat gerade mit " . $product->operation() . " gearbeitet";
}
}
class ConcreteCreatorA extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator
{
public function factoryMethod(): Product
{
return new ConcreteProductB();
}
}
Der Hauptunterschied ist folgender:
| Merkmal | "Fabrik" (Simple Factory) | "Fabrikationsmethode" (Factory Method) |
|---|---|---|
| Verantwortlichkeit | Eine Klasse oder eine statische Funktion erstellt Objekte. | Unterklassen bestimmen, welche Klasse erstellt wird. |
| Flexibilität | Eingeschränkt. Erfordert Änderungen an der Fabrikklasse bei Hinzufügen eines neuen Produkttyps. | Hoch. Leicht erweiterbar durch Hinzufügen neuer Unterklassen. |
| Vererbung | Wird meist nicht verwendet oder nur für eine Fabrik. | Verwendet Vererbung, um zu bestimmen, welches Objekt erstellt werden soll. |
| Abstraktionsniveau | Weniger abstrakt. | Höher abstrakt. |
| Ziel | Zentralisierte Objekterstellung. | Delegierung der Objekterstellung an Unterklassen. |