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.