Treci la conținutul principal

Ce este

Șablonul Proxy pune un înlocuitor cu aceeași interfață în fața unui obiect real. Apelanții vorbesc cu proxy-ul ca și cum ar fi obiectul adevărat; proxy-ul decide când și cum implică originalul.

Sarcini obișnuite ale unui proxy: păstrarea răspunsurilor în cache, verificarea accesului, amânarea unei creări costisitoare, numărarea apelurilor.


Exemplu: un proxy cu cache

Serviciul meteo real este lent. Proxy-ul răspunde la întrebările repetate din cache-ul său și apelează serviciul doar pentru cele noi — în spatele exact aceleiași interfețe.

Înlocuitorul care ține minte

Prima întrebare despre Paris ajunge la serviciul la distanță; a doua primește răspuns din cache — linia „se apelează serviciul la distanță” se afișează o singură dată.

Prompt
Scrie un program Go cu un Proxy care păstrează răspunsurile în cache: o interfață Weather (metoda Forecast), un WeatherService care afișează un mesaj când apelează serviciul la distanță și un proxy CachedWeather care stochează răspunsurile într-un map și le servește pe cele repetate din cache. Cere prognoza pentru același oraș de două ori și afișează ambele răspunsuri.
Ieșire: program Go și rezultatul capturat

Când să îl folosești

Folosește-l pentru a adăuga cache, control al accesului, încărcare amânată sau contorizare în fața a ceva ce nu poți sau nu ar trebui să schimbi — mai ales resurse aflate la distanță sau costisitoare.

Renunță la el când obiectul îți aparține și comportamentul îi revine chiar lui. Un proxy controlează accesul; un decorator adaugă comportament în straturi — alege intenția care se potrivește.


Avantaje și dezavantaje

Avantaje: apelanții nu au nevoie de nicio modificare; munca costisitoare este evitată sau controlată într-un singur loc.

Dezavantaje: comportament ascuns — un apelant poate primi un răspuns din cache fără să știe; cache-urile învechite și refuzurile neașteptate se depanează în spatele unei interfețe care pare nevinovată.