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