In una tipica applicazione client-server basata su socket, il client e il server devono implementare meccanismi per:
Il problema è che, in questo modo, si “mischiano” alla logica applicativa molti dettagli relativi alla comunicazione client-server: ciò può creare delle difficoltà, soprattutto in fase di manutenzione e nel porting.
Idealmente, il programmatore che implementa il client dovrebbe potersi concentrare sulla logica applicativa, cioè:
In altre parole, sarebbe conveniente separare la logica applicativa dei dettagli dei meccanismi di interazione con il server.
Analogamente, il programmatore lato server dovrebbe concentra sulla codifica dei servizi da offrire, qiundi si vorrebbe separare la realizzazione di tali servizi dai meccanismi per la comunicazione con il client.
Il pattern proxy introduce un ulteriore componente, chiamato appunto proxy, nel modello di interazione client-server.
Esso si presenta come un’implementazione del servizio remoto, local al client (fa parte dello stesso programma), e fornisce un’interfaccia uguale a quella del server reale. I meccanismi di basso livello necessari per l’instaurazione della comunicazione e lo scambio di dati (compresa la gestione del protocollo applicativo) sono implementati e incapsulati all’interno del proxy, che inoltra al server tutte le richieste del client.