Proxy pattern
# Proxy pattern

In informatica, il proxy pattern è un design pattern.

Nella sua forma più generale, un proxy è una classe che funziona come interfaccia per qualcos'altro. L'altro potrebbe essere qualunque cosa: una connessione di rete, un grosso oggetto in memoria, un file e altre risorse che sono costose o impossibili da duplicare.

Un esempio ben conosciuto di proxy pattern è la tecnica reference counting dei puntatori.

Nelle situazioni in cui molte copie di un oggetto complesso devono esistere, il proxy pattern può essere adottato per incorporare il Flyweight pattern per ridurre l'occupazione di memoria dell'oggetto. Tipicamente viene creata un'istanza di oggetto complesso, e molteplici oggetti proxy, ognuno dei quali contiene un riferimento al singolo oggetto complesso. Ogni operazione svolta sui proxy viene trasmessa all'oggetto originale. Una volta che tutte le istanze del proxy sono distrutte, l'oggetto in memoria può essere deallocato.

## Esempi

### Virtual proxy (in Java)

Il seguente esempio Java illustra il pattern "virtual proxy". L'output del programma è:

La classe ProxyImage è utilizzata per ritardare l'operazione (onerosa) di caricamento di un file dal disco finché il risultato di questa operazione non è effettivamente necessario. Se il file non è mai necessario, il caricamento risulta essere completamente eliminato.

### Protection proxy

In questo esempio scritto in C#, nella classe RealClient è memorizzato un numero di conto. Soltanto gli utenti che conoscono una password valida possono accedere a questo conto. Il RealClient è protetto dal ProtectionProxy che conosce la password. Prima di far leggere il numero di conto all'utente, il proxy richiede che questi si autentichi; Solo se la password introdotta è corretta il proxy invoca il RealClient per restituire il numero di conto all'utente.

In questo esempio thePassword è la password corretta

Segue lo stesso esempio implementato in Java, in questo caso le implementazioni dell'interfaccia Client sono RealClientImpl e ProtectionProxyClientImpl .

