Design Pattern e Pattern Adapter

Design Pattern e Pattern Adapter

L’Adapter è il design pattern strutturale più utilizzato in assoluto poiché fornisce la funzionalità di convertire l’interfaccia di una classe nell’interfaccia di un’altra classe. Supponiamo di avere un editor grafico in grado di comporre disegni ma anche testo. L’incompatibilità sta nel fatto che testo e linee e poligoni sono classi con interfacce diverse e quindi per rendere simili uso l’adapter.

Vediamo un classico esempio grafico per l’adapter:

Ingegneria del software e Design Pattern - Esempio Adapter
Ingegneria del software e Design Pattern – Esempio Adapter

Supponiamo di avere un editor grafico in grado di disegnare sia grafici sia testo. E’ evidente dove è l’incompatibilità,infatti essa sta nel fatto che testo e poligoni sono classi con interfacce diverse ma non del tutto incompatibili. Pertanto bisogna trovare un modo per renderle compatibili.

Supponiamo di avere una Shape astratta, quindi una classe che definisca le caratteristiche degli oggetti grafici, e l’applicazione definisca una sotto classe di shape per ogni oggetto specifico. Se volessi implementare una Text shape essa non può essere messa direttamente come sottoclasse di Shape (ossia della forma geometrica) poiché il testo ha caratteristiche ben diverse. Vorrei quindi riutilizzare un classe (text view) per visualizzare e modificare il testo. La tentazione sarebbe quella di modificare la classe, ma ciò è totalmente sbagliato!! E’ sbagliato concettualmente perché si sta venendo meno al principio della riusabilità,poiché se si ha qualcosa di rigidamente già definito si può utilizzare in vari contesti, adattandolo ma mai stravolgendolo! Se non è riusabile direttamente non si deve modificare, ma si deve fare in modo che essa possa essere utilizzata, adattata. Per cui bisogna utilizzare una nuova classe “Text shape” che vada ad adattare la text view e permetta di rendere compatibili la shape e la text view senza modificarle.

L’editor grafico può utilizzare la classe text view come se fosse un “figlio” della classe shape.

Vantaggi del pattern Adapter

Il pattern adapter fornisce delle funzionalità che la classe adattata in caso contrario, non avrebbe.

Quando utilizzarlo?

La difficoltà dei pattern sta proprio nel capire come e quale pattern utilizzare. In linea di massima usiamo l’adapter quando abbiamo una classe esistente con interfaccia diversa con un’altra e vogliamo che esse interagiscono. Oppure quando si vuole creare una classe riusabile che si possa correlare con classi con interfacce diverse.

La struttura di un adapter in sintesi è di questo tipo:

Ingegneria del software e Design Pattern - Struttura Adapter
Ingegneria del software e Design Pattern – Struttura Adapter

Nell’Adapter abbiamo una classe Target che definisce l’interfaccia specifica del dominio utilizzato dal client, che è il resto del sistema. L’adaptee è l’interfaccia che deve essere adattata e l’adapter è la classe che si occupa appunto di rendere le due interfacce compatibili tra di loro.

Precedente Ingegneria del software e Design Pattern Successivo Design Pattern e Pattern Observer

Lascia un commento

*