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.