Differenza tra il modello di adattatore e il modello di proxy?


33

A quanto risulta , il modello di adattatore sta creando un oggetto wrapper per il nostro vero oggetto di interesse, semplicemente un ulteriore livello di riferimento indiretto, che offre flessibilità. la flessibilità è che, se l'interfaccia dell'oggetto reale viene modificata, cambiamo l'interfaccia del wrapper che punta sull'oggetto reale, lasciando invariata l'interfaccia esposta sul lato client.

Il modello proxy è lo stesso, con la differenza che ogni wrapper proxy fornisce solo un sottoinsieme coerente della funzionalità dell'oggetto reale. Perché sarebbe utile, quando ci sforziamo di creare "una classe per uno scopo" è oltre me.

L'ho ottenuto correttamente?

Risposte:


55

Non del tutto.

Lo scopo principale del modello di adattatore è modificare l'interfaccia della classe / libreria A in base alle aspettative del cliente B. L'implementazione tipica è una classe wrapper o un insieme di classi. Lo scopo non è facilitare le future modifiche all'interfaccia, ma le attuali incompatibilità dell'interfaccia.

Il modello proxy utilizza anche le classi wrapper, ma per uno scopo diverso. Lo scopo del modello proxy è quello di creare uno stand-in per una risorsa reale. I motivi per l'utilizzo di un proxy possono essere

  • La risorsa reale risiede su un computer remoto (il proxy facilita l'interazione con la risorsa remota)
  • La vera risorsa è costosa da creare (il proxy assicura che il costo non sia sostenuto a meno che / fino a quando non sarà realmente necessario)

La cosa più importante è che un proxy fornisce un sostituto drop-in per la risorsa reale per cui è un sostituto, quindi deve fornire la stessa interfaccia.


Prima di tutto, grazie per l'ottima risposta. Un proxy implementa tutte le interfacce di cui il cliente corrente ha bisogno o implementa tutte le interfacce fornite dalla risorsa effettiva?
Vorac,

1
@Vorac: dipende dalla complessità dell'interfaccia e dalla tua filosofia di progettazione. Entrambi sono possibili, ma se l'interfaccia è grande / complessa o credi fermamente in YAGNI, allora ha più senso implementare solo ciò di cui hai bisogno.
Bart van Ingen Schenau,

Quindi, dato che il modello Adapter utilizza classi wrapper, il modello Adapter è un modello proxy?
moonman239,

@ moonman239: No, perché l'intenzione di utilizzare una classe wrapper è diversa. Solo perché due schemi sembrano simili in un diagramma di classe non significa che siano correlati o implementati l'un l'altro. Un fattore importante per cui i modelli sono diversi è il loro intento.
Bart van Ingen Schenau,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.