Adapter Pattern per esporre aspetti diversi di un oggetto - È un uso corretto?

6

Molto spesso, utilizzo un design simile ad un adattatore per esporre aspetti diversi degli oggetti dati.

Ad esempio, in un'applicazione di modellazione 3D uso una gerarchia di oggetti per rappresentare i modelli 3d nella scena. Questa gerarchia contiene molte informazioni interne ed è piuttosto complessa da attraversare.

Per esportare i dati del modello 3D in diversi formati di file (che implica una trasformazione piuttosto significativa e omettere o convertire alcuni oggetti), ho una classe separata chiamata ModelAdapter. Estrae le informazioni importanti di un modello 3D e le fornisce in un formato diverso, utilizzabile per l'esportazione. I plugin di esportazione, a loro volta, leggono i dati dai ModelAdapters e non hanno nulla a che fare con la struttura dei dati di scena interna.

Per esempio:

class 3DModelAdapter
{
private 3DModel internal_model;
public List GetTriangles()
{
 internal_model.Do_Some_Complex_Thing_To_Retrieve_The_Triangles();
}
...
}

Questo è un uso valido del modello dell'adattatore? C'è un modo migliore per realizzare la stessa cosa?

    
posta LTR 21.04.2012 - 20:00
fonte

2 risposte

5

Ciò che ottieni è esattamente corretto.

Tuttavia ...

Adattatore è principalmente quando hai un'interfaccia prevista esistente di cui hai bisogno per adattare : "Converti l'interfaccia di una classe in un'altra interfaccia che i clienti si aspettano. Adpater consente alle classi di funzionare insieme che non potrebbero altrimenti a causa di interfacce incompatibili "

Facciata è principalmente quando si desidera astrarre le complicazioni di un sottosistema per renderlo più facile da utilizzare: "Fornire un'interfaccia unificata a un insieme di interfacce in un sottosistema. interfaccia di livello che rende il sottosistema più facile da usare "

Se il tuo intento è di essere in grado di utilizzare un sottosistema di modellazione 3d ma la sua interfaccia effettiva differisce dall'interfaccia che ti aspetti (forse perché sei in grado di sostituire sottosistemi di modellazione 3d in fase di esecuzione), allora la chiamerei adattatore .

Se il tuo intento è davvero quello di rendere più semplice l'utilizzo del sottosistema di modellazione 3d, lo chiamerei facade .

Solo semantica (e uno dei vantaggi dei modelli è il potere che una singola parola porta nella sua capacità di comunicare l'intento), quello che hai fatto è un buon modo per raggiungere il tuo obiettivo.

    
risposta data 21.04.2012 - 22:38
fonte
1

Sì. Questo è esattamente quando si desidera utilizzare il modello dell'adattatore.

    
risposta data 21.04.2012 - 20:02
fonte