Post

Decorator

In Design Patterns on febbraio 10, 2010 by poyblog Messo il tag:

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.

Una Risposta a “Decorator”

  1. [...] Decorator [...]

Lascia un Commento

Fill in your details below or click an icon to log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Log Out / Modifica )

Foto Twitter

You are commenting using your Twitter account. Log Out / Modifica )

Foto di Facebook

You are commenting using your Facebook account. Log Out / Modifica )

Connecting to %s

Iscriviti

Get every new post delivered to your Inbox.