Treci la conținutul principal

Ce este

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

Sarcini obișnuite pentru un proxy: memorarea răspunsurilor în cache, verificarea accesului, amânarea creării 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 — ambele clase respectă exact același protocol Weather, așa că apelanții nu le pot deosebi.

Înlocuitorul care ține minte

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

Prompt
Scrie un program Python cu un Proxy cu cache: un protocol Weather (metoda forecast), un WeatherService care afișează un mesaj când apelează serviciul la distanță și un proxy CachedWeather care păstrează răspunsurile într-un dicționar și servește din cache întrebările repetate. Cere de două ori prognoza pentru același oraș și afișează ambele răspunsuri.
Ieșire: program Python complet

Când să-l folosești

Folosește-l pentru a adăuga cache, control al accesului, inițializare întârziată sau contorizare în fața a ceva ce nu poți sau nu ar trebui să modifici — mai ales resurse la distanță sau costisitoare.

Renunță la el când obiectul îți aparține și comportamentul își are locul în interiorul lui. Un proxy servește la controlul accesului; un decorator servește la adăugarea de comportament în straturi — alege intenția potrivită.


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 cu aspect inofensiv.