Intento:
Associare responsabilità aggiuntive ad un oggetto dinamicamente. Il pattern Decorator fornisce una alternativa flessibile rispetto alla generazione di sottoclassi per estendere funzionalità
Applicabilità:
Decorator è da utilizzare nel caso in cui:
- si vuole aggiungere responsabilità ad un oggetto singolo in modo dinamico e trasparente, in modo da non coinvolgere altri oggetti
- al fine di assegnare responsabilità che possono essere fini a se stesse
- quando non è pratico attuare una estensione con la sotto-classificazione, per esempio per evitare una esplosione di sottoclassi nel caso in cui siano da gestire un numero elevato di funzionalità indipendenti; oppure perchè una definizione di una classe potrebbe essere nascosta o indisponibile alla sotto-classificazione
Partecipanti:
- Component → definisce l’interfaccia per tutti quegli oggetti ai quali è possibile aggiungere responsabilità dinamicamente.
- ConcreteComponent → definisce un oggetto al quale può essere aggiunta una funzionalità dinamicamente
- Decorator → mantiene un riferimento verso l’oggetto Component e definisce un’interfaccia che è conforme a quella del Component
- ConcreteDecorator → aggiungere responsabilità al Component
Conseguenze:
- Il pattern Decorator è più flessibile rispetto alla ereditarietà (multipla) fra classi
- Non è necessario creare una struttura complessa in cui alcune funzionalità rischiano di non essere utilizzate, ma partendo da una semplice classe è facile aggiungere funzionalità in modo incrementale aggiungendo oggetti di tipo Decorator.
- Decorator ed il suo componente non sono identici, ciò significa che non si può contare sulla identità dell’oggetto quando si utilizza tale pattern.
- C’è una quantità anche considerevole di piccoli oggetti, tutto ciò si traduce in difficoltà di comprensione del disegno e di debugging.










[...] Decorator [...]