STRUCTURAL

Proxy

Fornire un surrogato o segnaposto per un altro oggetto per controllarne l'accesso.

Il Problema

Vuoi aggiungere controllo di accesso, lazy loading, caching, o logging a un oggetto senza modificare il suo codice.

La Soluzione

Creare una classe proxy che implementa la stessa interfaccia dell'oggetto reale e contiene un riferimento ad esso. Il proxy intercetta chiamate e può aggiungere logica prima/dopo aver delegato all'oggetto reale.

Struttura

Subject interface, RealSubject implementa Subject, Proxy implementa Subject e mantiene riferimento a RealSubject.

Partecipanti:
Subject - interfaccia comune per RealSubject e Proxy
RealSubject - oggetto reale rappresentato dal proxy
Proxy - mantiene riferimento a RealSubject e controlla accesso ad esso
Client - lavora con Subject tramite interfaccia
Esempi di Codice

Proxy per Image Loading (Virtual Proxy)

Lazy loading di immagini pesanti - caricamento solo quando necessario.

JAVASCRIPT
Loading...

Proxy per Access Control (Protection Proxy)

Controllo dell'accesso a operazioni sensibili basato sui permessi.

JAVASCRIPT
Loading...
Esempi nel Mondo Reale
Virtual Proxy - lazy loading di oggetti pesanti (immagini, video)
Protection Proxy - controllo accesso basato su permessi
Remote Proxy - rappresenta oggetti in spazi di indirizzamento diversi (RPC, REST API)
Caching Proxy - cache dei risultati di operazioni costose
Logging Proxy - log delle chiamate ai metodi
Quando Usarlo
Quando vuoi lazy initialization di oggetti pesanti
Quando vuoi controllo di accesso a un oggetto
Quando vuoi aggiungere funzionalità (logging, caching) senza modificare oggetto
Quando l'oggetto è remoto o difficile da accedere direttamente
Quando NON Usarlo
Quando la complessità del proxy non è giustificata
Quando non hai bisogno di controllo sull'accesso
Quando l'overhead del proxy è troppo alto
Pattern Correlati