Vzor proxy v Jave

1. Prehľad

Vzor proxy nám umožňuje vytvoriť sprostredkovateľa, ktorý slúži ako rozhranie k inému prostriedku, a zároveň zakrýva základnú zložitosť súčasti.

2. Príklad vzoru proxy

Zvážte ťažký objekt Java (napríklad pripojenie JDBC alebo SessionFactory), ktorá vyžaduje určitú počiatočnú konfiguráciu.

Chceme, aby sa takéto objekty inicializovali iba na požiadanie, akonáhle sú, chceli by sme ich znova použiť na všetky volania:

Vytvorme teraz jednoduché rozhranie a konfiguráciu tohto objektu:

verejné rozhranie ExpensiveObject {void process (); }

A implementácia tohto rozhrania s veľkou počiatočnou konfiguráciou:

verejná trieda ExpensiveObjectImpl implementuje ExpensiveObject {public ExpensiveObjectImpl () {heavyInitialConfiguration (); } @Override public void process () {LOG.info ("spracovanie je dokončené."); } private void heavyInitialConfiguration () {LOG.info ("Načítava sa počiatočná konfigurácia ..."); }}

Teraz použijeme vzor proxy a inicializujeme náš objekt na požiadanie:

verejná trieda ExpensiveObjectProxy implementuje ExpensiveObject {súkromný statický objekt ExpensiveObject; @Override public void process () {if (object == null) {object = new ExpensiveObjectImpl (); } object.process (); }}

Kedykoľvek náš klient zavolá proces () iba uvidia spracovanie a počiatočná konfigurácia zostane vždy skrytá:

public static void main (String [] args) {ExpensiveObject object = new ExpensiveObjectProxy (); object.process (); object.process (); }

Upozorňujeme, že voláme proces () metóda dvakrát. V zákulisí sa časť s nastaveniami vyskytne iba raz - pri prvej inicializácii objektu.

Pri každom ďalšom nasledujúcom hovore tento vzor preskočí pôvodnú konfiguráciu a dôjde iba k spracovaniu:

Načítava sa počiatočná konfigurácia ... spracovanie je dokončené. spracovanie dokončené.

3. Kedy použiť server proxy

Pochopenie ako použitie vzoru je dôležité.

Pochopenie kedy jeho použitie je kritické.

Poďme si povedať, kedy použiť vzor proxy:

  • Keď chceme zjednodušenú verziu zložitého alebo ťažkého predmetu. V takom prípade ho môžeme reprezentovať kostrou, ktorá na požiadanie načíta pôvodný objekt, ktorý sa tiež nazýva lenivá inicializácia. Toto sa nazýva virtuálny proxy server
  • Keď je pôvodný objekt prítomný v inom adresnom priestore a chceme ho lokálne reprezentovať. Môžeme vytvoriť proxy, ktorý vykoná všetky potrebné základné informácie, ako je vytváranie a udržiavanie spojenia, kódovanie, dekódovanie atď., Zatiaľ čo klient k nemu pristupuje tak, ako bol prítomný v miestnom adresnom priestore. Toto sa nazýva Remote Proxy
  • Keď chceme pridať vrstvu zabezpečenia k pôvodnému podkladovému objektu, aby sme zabezpečili riadený prístup na základe prístupových práv klienta. Toto sa nazýva Protection Proxy

4. Záver

V tomto článku sme sa pozreli na návrhový vzor proxy. Toto je dobrá voľba v nasledujúcich prípadoch:

  • Keď chceme mať zjednodušenú verziu objektu alebo k objektu pristupovať bezpečnejšie
  • Keď chceme lokálnu verziu vzdialeného objektu

Celý zdrojový kód pre tento príklad je k dispozícii na GitHub.