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 înlocuitorul ca și cum ar fi obiectul adevărat; înlocuitorul decide când și cum implică originalul.

Sarcini obișnuite pentru un astfel de înlocuitor: memorarea răspunsurilor în cache, verificarea accesului, amânarea unei creări costisitoare, numărarea apelurilor.

Observație: numește clasa după sarcina ei — CachedWeather, ReadOnlyAccount — niciodată Proxy. Acel nume aparține deja unui obiect JavaScript încorporat.


Exemplu: un proxy cu cache

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

Î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ă, iar al doilea răspuns se termină cu (din cache).

Prompt
Scrie un program TypeScript cu un proxy care memorează răspunsurile: o interfață Weather cu o metodă forecast, o clasă WeatherService care afișează un mesaj atunci când apelează serviciul la distanță și un înlocuitor CachedWeather care păstrează răspunsurile într-un Map și servește repetările din cache. Cere de două ori același oraș și afișează ambele răspunsuri.
Ieșire: program TypeScript ș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ă modifici — în special resurse la distanță sau costisitoare.

Evită-l atunci când deții obiectul și comportamentul îi aparține lui. Un proxy servește la controlul accesului; un decorator servește la adăugarea de comportament în straturi — alege intenția care se potrivește.


Avantaje și dezavantaje

Avantaje: apelanții nu au nevoie de nicio modificare — păstrează aceeași interfață; 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ă.