Design patterns: Factory Method
Il Factory Method è un design pattern creazionale che fornisce un’interfaccia per creare oggetti in una classe, ma permette alle sottoclassi di decidere quale oggetto istanziare. In altre parole, sposta la logica di istanziazione di un oggetto dalla classe principale alle classi derivate, promuovendo l’estendibilità del codice senza modificare il codice esistente.
Caratteristiche del pattern factory method
- Delegazione della creazione: La classe principale non decide quale classe concreta istanziare, ma delega questa decisione alle sue sottoclassi.
- Estensibilità: Aggiungere nuovi tipi di oggetti non richiede modifiche alla classe principale.
- Polimorfismo: Le classi derivate possono personalizzare il comportamento di creazione senza influenzare le altre.
Esempio in PHP:
interface Car {
public function drive();
}
class Sedan implements Car {
public function drive() {
return "Driving a sedan";
}
}
class SUV implements Car {
public function drive() {
return "Driving an SUV";
}
}
class CarFactory {
public static function createCar($type) {
if ($type === 'sedan') {
return new Sedan();
} elseif ($type === 'suv') {
return new SUV();
}
throw new Exception("Tipo di auto non valido");
}
}
// Utilizzo
$car = CarFactory::createCar('sedan');
echo $car->drive();
Caso d’uso frequente
Un caso d’uso comune è un’applicazione che gestisce diversi tipi di documenti (PDF, Word, etc.). Utilizzando il Factory Method, la classe principale DocumentCreator può delegare la creazione del tipo specifico di documento (PDFDocument, WordDocument) alle sue sottoclassi, che decideranno quale istanziare.