Sobes.tech
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.