Design patterns: Decorator
Il pattern Decorator permette di aggiungere comportamenti a un oggetto in modo dinamico.
Caratteristiche del Decorator pattern
- Aggiunta dinamica di Comportamenti: Il Decorator Pattern consente di aggiungere nuovi comportamenti e responsabilità agli oggetti esistenti in modo dinamico, senza alterare il codice originale.
- Composizione Flessibile: Permette di combinare diversi decorator per estendere le funzionalità di un oggetto, offrendo una grande flessibilità nella creazione di comportamenti complessi.
- Rispetto del Principio di apertura/chiusura: Segue il principio di apertura/chiusura, permettendo di estendere le funzionalità degli oggetti senza modificare il codice esistente. Puoi aggiungere decorator senza cambiare le classi originali.
- Supporto per Oggetti complessi: Rende facile gestire oggetti con molte variazioni e opzioni, consentendo di creare configurazioni complesse senza la necessità di una gerarchia di classi statica.
- Interfaccia unificata: Gli oggetti decorati e gli oggetti originali implementano la stessa interfaccia, permettendo ai client di utilizzare oggetti decorati e non decorati in modo intercambiabile, senza preoccuparsi delle differenze di implementazione. zione del coupling (accoppiamento):** Promuove un basso accoppiamento tra le classi, poiché l’astrazione e l’implementazione sono completamente separate. Questo riduce la dipendenza diretta tra componenti.
Esempio in PHP:
interface Coffee {
public function cost();
}
class BasicCoffee implements Coffee {
public function cost() {
return 5;
}
}
class MilkDecorator implements Coffee {
private $coffee;
public function __construct(Coffee $coffee) {
$this->coffee = $coffee;
}
public function cost() {
return $this->coffee->cost() + 2; // Aggiunge il costo del latte
}
}
// Utilizzo
$basicCoffee = new BasicCoffee();
$milkCoffee = new MilkDecorator($basicCoffee);
echo $milkCoffee->cost(); // 7 (5 + 2)