Design Pattern Factory
1.023 visiteDesign Pattern Factory
Il design pattern factory è molto usato nell’ambito OOP (Programmazione Orientata a Oggetti) quando si ha la necessità a run-time di instanziare un oggetto tra un set di classi.
Per questo come una fabbrica (Factory) produciamo l’oggetto che ci serve.
Struttura
Factory è quindi composto dalle seguenti classi e interfacce che prendono parte alla creazione e instanziazione dell’oggetto:
- IProduct: Interfaccia che verrà implementata da tutti gli oggetti creati dal ConcreteProduct. Spesso è rappresentato anche con una classe astratta.
- ConcreteProduct: Implementa l’intefaccia definita da IProduct. Il ConcreteProduct verrà creato da ConcreteFactory.
- IFactory: E’ l’interfaccia implementata dal ConcreteFactory. Definisce un metodo (metodo factory) che si occupa di creare un ConcreteProduct. A volte questa interfaccia è una classe astratta con un metodo factory che restituisce un prodotto di default.
- ConcreteFactory: Implementa l’override del metodo factory dell’interfaccia/classe astratta IFactory per restituire ConcreteProduct specifici.
Questo è il diagramma delle classi UML che identifica il pattern Factory:
Un esempio molto compatto usando PHP è il seguente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
class Veicolo { private $vehicle_make; private $vehicle_model; public function __construct($make, $model) { $this->vehicle_make = $make; $this->vehicle_model = $model; } public function getVehicle() { return $this->vehicle_make . ' ' . $this->vehicle_model; } } class VeicoloFactory { public static function create($make, $model) { return new Automobile($make, $model); } } //Creiamo il nostro veicolo $vehicle = VeicoloFactory::create('Ferrari', 'F40'); print_r($vehicle->getVehicle()); // output "Ferrari F40" |
Altri esempi di utilizzo del pattern e in altri linguaggi li puoi trovare cliccando questo link.