Sobes.tech
Middle

Care este diferența dintre pattern-ul 'fabrica' și 'metoda fabricii'?

sobes.tech AI

Răspuns de la AI

Modelul de tip "Fabrica" (Simple Factory) se ocupă de crearea obiectelor de același tip, ascunzând logica instanțierii lor. Este o clasă separată sau o funcție statică care, pe baza parametrilor de intrare, creează și returnează un obiect concret.

<?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("Tip de produs invalid");
        }
    }
}

Modelul "Metoda Fabrica" (Factory Method) este un pattern de creare care definește o interfață pentru crearea unui obiect, dar permite subclasei să decidă ce clasă să instanțieze. Transferă responsabilitatea creării obiectelor către subclase.

<?php

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

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

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

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

    public function someOperation(): string
    {
        // Apelarea metodei factory pentru a crea un produs.
        $product = $this->factoryMethod();
        // Acum, folosește produsul.
        return "Creator: Același cod al creatorului a lucrat chiar cu " . $product->operation();
    }
}

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

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

Diferența principală este următoarea:

Caracteristică Modelul "Fabrica" (Simple Factory) Modelul "Metoda Fabrica" (Factory Method)
Responsabilitate O clasă sau o funcție statică creează obiecte. Subclasele decid ce clasă să creeze.
Flexibilitate Limitată. Necesită modificarea clasei fabrică la adăugarea unui nou tip de produs. Înaltă. Se extinde ușor prin adăugarea de noi subclase create.
Moștenire De obicei nu este utilizată sau este utilizată pentru crearea unei singure fabrici. Se bazează pe moștenire pentru a determina ce obiect să creeze.
Nivel de abstractizare Mai puțin abstract. Mai abstract.
Scop Crearea centralizată a obiectelor. Delegarea creării obiectelor către subclase.