Sobes.tech
Middle

Qual è la differenza tra il pattern 'fabbrica' e il 'metodo di fabbrica'?

sobes.tech AI

Risposta dell'AI

Il pattern "Factory" (Simple Factory) si occupa di creare oggetti dello stesso tipo, nascondendo la logica della loro istanziazione. È una classe separata o una funzione statica che, in base ai parametri di input, crea e restituisce un oggetto concreto.

<?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("Tipo di prodotto non valido");
        }
    }
}

Il pattern "Factory Method" (Metodo di Fabbrica) è un pattern creazionale che definisce un'interfaccia per creare un oggetto, ma permette alle sottoclassi di decidere quale classe istanziare. Trasferisce la responsabilità di creare oggetti alle sottoclassi.

<?php

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

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

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

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

    public function someOperation(): string
    {
        // Chiama il metodo factory per creare un prodotto.
        $product = $this->factoryMethod();
        // Ora, usa il prodotto.
        return "Creator: Lo stesso codice del creatore ha appena lavorato con " . $product->operation();
    }
}

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

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

La differenza principale è la seguente:

Caratteristica Pattern "Factory" (Simple Factory) Pattern "Factory Method" (Metodo di Fabbrica)
Responsabilità Una classe o funzione statica crea oggetti. Le sottoclassi determinano quale classe creare.
Flessibilità Limitata. Richiede modifiche alla classe factory quando si aggiunge un nuovo tipo di prodotto. Alta. Si espande facilmente aggiungendo nuove sottoclassi creatrici.
Ereditarietà Di solito non viene usato o viene usato per creare una sola factory. Si basa sull'ereditarietà per determinare quale oggetto creare.
Livello di astrazione Meno astratto. Più astratto.
Obiettivo Creazione centralizzata di oggetti. Delegare la creazione di oggetti alle sottoclassi.