Intento:
Convertire l’interfaccia di una classe in una nuova più conforme a ciò che il Client si aspetta.
Adapter permette a classi non omogenee di lavorare in simbiosi anche se le loro interfacce sono incompatibili.
Applicabilità:
Tale pattern è da utilizzare nel caso in cui
- si vuole utilizzare una classe esistente e la sua interfaccia non coincide con ciò di cui abbiamo bisogno
- si vuole creare una classe riutilizzabile che possa cooperare con classi non relazionate o impreviste, cioè classi che non possiedono necessariamente delle interfacce compatibili
- (Adapter solo a livello di oggetto) si vuole sfruttare alcune classi esistenti, ma non è conveniente adattare le loro interfacce creando sottoclassi. Un oggetto di tipo Adapter è in grado di adattare le interfacce delle classi padre.
Partecipanti:
- Target → definisce l’interfaccia specifica per il dominio di interesse che il Client si aspetta
- Client → collabora con gli oggetti conformi alla interfaccia Target
- Adaptee → definisce una interfaccia esistente che ha bisogno di essere adattata
- Adapter → adatta l’interfaccia dell’Adaptee all’interfaccia del Target
Conseguenze:
E’ lecito in questa fase distinguere fra Adapter a livello di classe e di oggetto, dato che portano a conseguenza ben diverse.
Cominciamo dal livello di classe:
- una classe di tipo Adapter non può lavorare nel caso in cui si volesse adattare una classe e tutte le sue sottoclassi
- se lasciamo che Adapter sovrascriva alcuni comportamenti di Adaptee , allora Adapter è una sottoclasse di Adaptee
A livello di oggetto:
- è possibile che un singolo Adapter lavori con molti Adaptee
- diventa più difficile sovrascrivere il comportamento del Adapter
Altre considerazioni più generali possono essere riassunte in questi tre ultimi punti:
- Adapter può adattarsi ad un numero variabile di Target
- Si possono utilizzare degli adattatori cosiddetti Pluggable, in gradi di ospitare metodi per rendere adattabili diverse classi
- Si possono utilizzare adattatori a due vie per rendere il processo di adattamento molto più trasparente










[...] Adapter [...]