Intento:
Fornire un surrogato per un oggetto al fine di controllarne l’accesso
Applicabilità:
Il Pattern Proxy è applicabile ovunque c’è bisogno di un riferimento verso un oggetto più sofisticato o versatile rispetto al semplice puntatore. Ci sono molte situazioni in cui è possibile sfruttare il pattern in questione:
- Un proxy remoto fornisce una rappresentazione locale di un oggetto presente in uno sapzio degli indirizzi diverso
- Un proxy virtuale crea oggetti “costosi” all’occorrenza (on-demand)
- Un proxy di protezione, che controlla l’accesso verso l’oggetto originale. In questo cas il pattern viene sfruttato spesso quando vi sono diversi tipi di privilegi sullo stesso
- Un riferimento elegante (smart reference) è il sostituto di un classico puntatore, il quale fornisce azioni aggiuntive quanto l’oggetto in questione viene acceduto:
- vengono contati i riferimenti all’oggetto reale, in modo tale che questo può essere rilasciato quando non vi sono più riferiemnti
- viene caricato un oggetto persistente all’interno della memoria quando questo viene chiamato la prima volta
- viene controllato se tale oggetto è bloccato al momento del caricamento, in modo da garantire che nessuno lo possa cambiare durante l’accesso.
Partecipanti:
- Proxy → mantiene un riferimento che lascia al proxy accesso all’oggetto reale, in più fornisce un’interfaccia identica a quella del Subject, tale per cui egli stesso può sostituire l’oggetto reale. Controlla l’accesso al soggetto reale. In più esistono altre responsabilità che dipendono dal tipo di proxy, eccone una serie:
- proxy remoto → questo è responsabile di codificare una richiesta e inviare la stessa al soggetto reale presente all’interno di uno spazio degli indirizzi differente.
- proxy virtuale → è in grado di immagazzinare informazioni aggiuntive sul soggetto reale in modo tale da posporre l’accesso allo stesso
- proxy di protezione → controlla che il chiamante abbia i premessi sufficienti prima di sottomettere la richiesta
- Subject → Definisce l’interfaccia comune dell’oggetto reale e del proxy in modo tale che il proxy stesso possa essere utilizzato al posto del soggetto reale
- RealSubject → E’ l’oggetto reale.
Conseguenze:
Ecco tre conseguenze dirette rispetto al tipo di proxy utilizzato:
- un proxy remoto può nascondere il fatto che un oggetto risieda in uno spazio degli indirizzi diverso
- un proxy virtuale può fornire una ottimizzazione delle prestazioni, come per esempio creare un oggetto al volo (on demand)
- sia i proxy di protezione che i riferimenti intelligenti forniscono una maggiore pulizia quando si accede l’oggetto









