UGIdotNET Home UGIdotNET Home
UGIdotNET Blogs UGIdotNET Blogs
UGIdotNET Forum UGIdotNET Forum
MSDN Architetti MSDN Architetti
Visualizza Modifiche Visualizza Modifiche
Modifica Modifica
Stampa Stampa
Modifiche Recenti Modifiche Recenti
Sottoscrizioni Sottoscrizioni
Ufficio Oggetti Smarriti Ufficio Oggetti Smarriti
Cerca Riferimenti Cerca Riferimenti
Rinomina Rinomina
Cerca

Versioni

05/03/2007 10.41.52
-82.105.148.32
25/12/2005 14.25.47
LucaMinudel-151.47.144.232
25/12/2005 13.44.19
LucaMinudel-151.47.144.232
25/12/2005 13.13.03
LucaMinudel-151.47.144.232
24/12/2005 22.41.21
LucaMinudel-151.47.144.190
Elenco completo versioni Elenco completo versioni
Pattern Adapter
.
Summary un design pattern che adatta l'interfaccia di una classe o di un oggetto.

Conosciuto anche come

Wrapper.

Intento

Il design pattern Adatper converte l'interfaccia di una classe o di un oggetto (Adaptee) nell'interfaccia (Target) che l'utilizzatore (Client) si aspetta. Il design pattern Adatper permette all'utilizzatore (Client) e alla classe o oggetto (Adaptee) che altrimenti non potrebbero collaborare di lavorare insieme.

La classe Adatper qualora referenzi la classe Adaptee con una RelazioneDiContenimento, fa si che questo design pattern sia classificato rispetto allo scopo (vedi ClassificazioneDeiDesignPattern#ClassiOggetti) come rivolto agli oggetti. Qualora la classe Adatper referenzi la classe Adaptee con una RelazioneDiEreditarietà questo design pattern viene classificato rispetto allo scopo come rivolto alle classi. Rispetto al fine questo questo design pattern è classificato tra i ClassificazioneDeiDesignPattern#Strutturali.

Diagramma UML

Adapter per un oggetto:

Adapter per una classe:

Motivazione

Quando si desidera riutilizzare una classe od un oggetto dato (di terze parti, già rilasciato e compilato, etc.) non modificabile da parte di un utilizzatore che si attende una diversa interfaccia, il desin pattern Adapter permette il riutilizzo fornendo l'interfaccia attesa e richiamando le funzioni della classe o oggetto dato.

Esempi d'uso in .NET

Il metodo statico Adapter(IList) del tipo ArrayList riceve in ingresso una collezione di elementi (IList) quale oggetto Adaptee e restituisce una istanza di ArrayList quale Adapter.

Per chi fa uso della interop di .NET per accedere a componenti COM e DLL legacy, l'esempio più tangibile e frequeste di applicazione del design pattern Adapter in .NET è la classe Runtime Callable Wrapper (RCW) che usando tlbimp.exe genera un Adapter che permette di accedere a oggetti e funzioni unmanaged da client managed.

Note sulla implementazione in .NET

In .NET non è disponibile ne la RelazioneDiEreditarietàPrivata e l'EreditarietàMultipla che sono entrambe necessarie per avere un Adapter di classe quindi in .NET è possibile implementare solo un Adapter di oggetto ossia realizzato attraverso una RelazioneDiContenimento tra l'Adapter e l'Adaptee.

Del codice .NET di esempio è disponibile qui .

Relazione con altri design pattern

Vedi la mappa della RelazioneTraDesignPattern.

Approfondimenti

La classe Adapter oltre ad adattare l'interfaccia del Adaptee può mettere a disposizione nuove funzionalità implementate da zero o ottenute con il supporto dell'Adaptee.

Domande di approfondimento

  • Un Adapter con stessa interfaccia dell'Adaptee è equivalente al PatternProxy?
  • Che differenza chè tra questo design pattern e il PatternBridge?
  • Che differenza chè tra questo design pattern e il PatternDecorator?
  • Che differenza chè tra questo design pattern e il PatternFacade?

Link

TBD http://c2.com/cgi/wiki?DesignPatterns

VediAnche CatalogoDeiDesignPattern

UGIdotNETWiki

UGIdotNETWiki è il WikiWiki italiano dedicato a .NET

Se è la prima volta che senti parlare di Wiki, leggi il BenvenutoAiVisitatori e WikiInUnMinuto, oppure il ManualePassoPassoDelWiki.

Argomenti Recenti

  • PatternAdapter
© 2008 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali