Adapter pattern

Da Wikipedia, l'enciclopedia libera.

Con il nome adapter, o adattatore si denota un design pattern utilizzato in informatica nella programmazione orientata agli oggetti. A volte viene chiamato wrapper (ovvero involucro) per il suo schema di funzionamento.

Il fine dell'adapter è di fornire una soluzione astratta al problema dell'interoperabilità tra interfacce differenti. Il problema si presenta ogni qual volta nel progetto di un software si debbano utilizzare sistemi di supporto (come per esempio librerie) la cui interfaccia non è perfettamente compatibile con quanto richiesto da applicazioni già esistenti. Invece di dover riscrivere parte del sistema, compito oneroso e non sempre possibile se non si ha a disposizione il codice sorgente, può essere comodo scrivere un adapter che faccia da tramite.

L'Adapter è un pattern strutturale che può essere basato sia su classi che su oggetti.

Questo design pattern è parte fondamentale della programmazione a oggetti ed è stato formalizzato per la prima volta da Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides - la cosiddetta gang of four - nel libro Design Patterns.

Applicabilità[modifica | modifica wikitesto]

L'uso del pattern Adapter risulta utile quando interfacce di classi differenti devono comunque poter comunicare tra loro. Alcuni casi possono includere

  • l'utilizzo di una classe esistente che presenti un'interfaccia diversa da quella desiderata;
  • la scrittura di una determinata classe senza poter conoscere a priori le altre classi con cui dovrà operare, in particolare senza poter conoscere quale specifica interfaccia sia necessario che la classe debba presentare alle altre.

Un altro contesto è quello in cui si desidera che l'invocazione di un metodo di un oggetto da parte dei client avvenga solo in maniera indiretta: il metodo "target" viene incapsulato all'interno dell'oggetto, mentre uno o più metodi "pubblici" fanno da tramite con l'esterno. Questo consente alla classe di subire modifiche future mantenendo la retrocompatibilità, oppure di implementare in un unico punto una funzionalità alla quale i client accedono tramite metodi più "comodi" da usare e con signatures differenti.

Struttura[modifica | modifica wikitesto]

Il pattern Adapter può essere basato su classi, utilizzando l'ereditarietà multipla per adattare interfacce diverse con il meccanismo dell'ereditarietà, oppure sulla composizione di oggetti.

Partecipanti[modifica | modifica wikitesto]

Diagramma UML del Pattern
  • Adaptee: definisce l'interfaccia che ha bisogno di essere adattata.
  • Target: definisce l'interfaccia che usa il Client.
  • Client: collabora con gli oggetti in conformità con l'interfaccia Target.
  • Adapter: adatta l'interfaccia Adaptee all'interfaccia Target.

Voci correlate[modifica | modifica wikitesto]

Altri progetti[modifica | modifica wikitesto]