Proxy obrazac u Javi
1. Pregled
Proxy obrazac omogućuje nam stvaranje posrednika koji djeluje kao sučelje za drugi resurs, istovremeno skrivajući temeljnu složenost komponente.
2. Primjer uzorka proxyja
Razmislite o teškom Java objektu (poput JDBC veze ili SjednicaTvornica) koja zahtijeva neku početnu konfiguraciju.
Želimo da se takvi objekti inicijaliziraju samo na zahtjev, a nakon što ih žele, htjeli bismo ih ponovno koristiti za sve pozive:

Stvorimo sada jednostavno sučelje i konfiguraciju za ovaj objekt:
javno sučelje ExpensiveObject {void process (); }
I implementacija ovog sučelja s velikom početnom konfiguracijom:
javna klasa ExpensiveObjectImpl implementira ExpensiveObject {public ExpensiveObjectImpl () {heavyInitialConfiguration (); } @Preuzmi javni void postupak () {LOG.info ("obrada završena."); } private void heavyInitialConfiguration () {LOG.info ("Učitavanje početne konfiguracije ..."); }}
Sada ćemo upotrijebiti obrazac Proxy i inicijalizirati naš objekt na zahtjev:
javna klasa ExpensiveObjectProxy implementira ExpensiveObject {privatni statički objekt ExpensiveObject; @Preuzmi javni void postupak () {if (objekt == null) {object = new ExpensiveObjectImpl (); } object.process (); }}
Kad god naš klijent nazove postupak() metodu, samo će vidjeti obradu i početna konfiguracija uvijek će ostati skrivena:
javna statička void glavna (String [] args) {ExpensiveObject object = new ExpensiveObjectProxy (); object.process (); object.process (); }
Imajte na umu da zovemo postupak() metoda dva puta. Iza kulisa, dio postavki dogodit će se samo jednom - kada se objekt prvi put pokrene.
Za svaki sljedeći poziv ovaj će obrazac preskočiti početnu konfiguraciju i dogodit će se samo obrada:
Učitavanje početne konfiguracije ... obrada završena. obrada završena.
3. Kada koristiti proxy
Razumijevanje kako koristiti obrazac je važno.
Razumijevanje kada koristiti je kritično.
Razgovarajmo o tome kada koristiti obrazac Proxy:
- Kad želimo pojednostavljenu verziju složenog ili teškog predmeta. U ovom ga slučaju možemo predstaviti s kosturnim objektom koji učitava izvorni objekt na zahtjev, koji se naziva i lijena inicijalizacija. Ovo je poznato kao virtualni proxy
- Kada je izvorni objekt prisutan u drugom adresnom prostoru, a mi ga želimo predstaviti lokalno. Možemo stvoriti proxy koji obavlja sve potrebne uzorke poput stvaranja i održavanja veze, kodiranja, dekodiranja itd., Dok mu klijent pristupa onako kako je bio prisutan u njegovom lokalnom adresnom prostoru. To se naziva udaljeni proxy
- Kada želimo dodati nivo zaštite izvornom temeljnom objektu kako bismo pružili kontrolirani pristup na temelju prava pristupa klijenta. To se naziva Proxy zaštite
4. Zaključak
U ovom smo članku pogledali uzorak dizajna proxy servera. Ovo je dobar izbor u sljedećim slučajevima:
- Kada želimo imati pojednostavljenu verziju objekta ili mu pristupiti sigurnije
- Kada želimo lokalnu verziju udaljenog objekta
Potpuni izvorni kod za ovaj primjer dostupan je na GitHubu.