Sobes.tech
Middle

Jaka jest różnica między wzorem 'fabryka' a 'metodą fabryczną'?

sobes.tech AI

Odpowiedź od AI

Wzorzec "Fabryka" (Simple Factory) odpowiada za tworzenie obiektów tego samego typu, ukrywając logikę ich instancjonowania. Jest to osobna klasa lub statyczna funkcja, która na podstawie parametrów wejściowych tworzy i zwraca konkretny obiekt.

<?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("Nieprawidłowy typ produktu");
        }
    }
}

Wzorzec "Metoda Fabryki" (Factory Method) jest wzorcem kreacyjnym, który definiuje interfejs do tworzenia obiektu, ale pozwala podklasom decydować, jaką klasę zainstancjonować. Przenosi odpowiedzialność za tworzenie obiektów na podklasy.

<?php

interface Product
{
    public function operation(): string;
}

class ConcreteProductA implements Product
{
    public function operation(): string
    {
        return "Wynik ConcreteProductA";
    }
}

class ConcreteProductB implements Product
{
    public function operation(): string
    {
        return "Wynik ConcreteProductB";
    }
}

abstract class Creator
{
    abstract public function factoryMethod(): Product;

    public function someOperation(): string
    {
        // Wywołaj metodę fabryczną, aby utworzyć produkt.
        $product = $this->factoryMethod();
        // Teraz użyj produktu.
        return "Twórca: Ten sam kod twórcy właśnie pracował z " . $product->operation();
    }
}

class ConcreteCreatorA extends Creator
{
    public function factoryMethod(): Product
    {
        return new ConcreteProductA();
    }
}

class ConcreteCreatorB extends Creator
{
    public function factoryMethod(): Product
    {
        return new ConcreteProductB();
    }
}

Główna różnica jest następująca:

Cecha Wzorzec "Fabrika" (Simple Factory) Wzorzec "Metoda Fabryki" (Factory Method)
Odpowiedzialność Jedna klasa lub funkcja statyczna tworzy obiekty. Podklasy decydują, jaką klasę tworzyć.
Elastyczność Ograniczona. Wymaga modyfikacji klasy fabryki przy dodawaniu nowego typu produktu. Wysoka. Łatwo rozszerzalny przez dodanie nowych podklas twórców.
Dziedziczenie Zazwyczaj nie używa się lub używa do tworzenia jednej fabryki. Opiera się na dziedziczeniu, aby określić, jaki obiekt tworzyć.
Poziom abstrakcji Mniej abstrakcyjny. Bardziej abstrakcyjny.
Cel Centralne tworzenie obiektów. Delegowanie tworzenia obiektów podklasom.