Proxy jest wzorem strukturalnym, który pełni rolę reprezentanta innego obiektu w celu uzyskania nadzorowanego dostępu do obiektu, który przedstawia.
Proxy – przykłady użycia:
Wzorzec ten popularnie wykorzystuje się przy okazji:
- Programowania zorientowanego obiektowo.
- Testowania i mockowania.
- Dodawania warstwy zabezpieczeń (Secuirty).
- Zarządzania transakcjami.
- I wile innych.
Zalety wzorca:
W przypadku aplikacji oszczędzamy pamięć i zasoby sprzętowe służące do realizacji ciężkich obliczeniowo operacji. Z punktu widzenia użytkownika aplikacja wymaga krótszego czasu wczytywania, bo skomplikowane elementy wczytują się tylko wtedy, kiedy są one rzeczywiście potrzebne.
Elementy wzorca:
- Kontroluje dostęp do zasobu i odpowiada za jego tworzenie oraz niszczenie.
- Przechowuje referencje do obiektu, którego reprezentuje.
- Posiada interfejs identyczny z interfejsem obiektu.
Diagram klas wzorca Proxy:
Rozatrzmy interfejs Subject, która dostarcza metodę Foo.
W takim przypadku nasz właściwy obiekt RealSubject musi implementować powyższy interfejs. Obok niego tworzymy obiekt Proxy, który w tym przykładzie nazywa się ProxySubject.
Zarówno RealSubject i ProxySubject implementują ten sam interfejs. Różnica polega na implementacji, ponieważ RealSubject zawiera właściwą implementację metody biznesowej, natomiast ProxySubject zawiera odwołanie do implementacji tej metody w klasie RealSubject.

Z punktu widzenia klienta powinniśmy powinnyśmy operować na implementacji interfejsu Subject dostarczanego przez ProxySubject. Zobacz to na przykładzie poniżej.
Implementacja wzorca
Wspólny interfejs
public interface Subject { void foo(); }
Klasa Proxy
public class ProxySubject: Subject { public RealSubject realSubject; // realSubject getter and setter public void foo() { realSubject.foo(); } }
Proxed class – klasa z właściwą implementacja do której odwołuje się obiekt Proxy
public class RealSubject implements Subject { public void foo() { System.out.println("hello ^-^"); } }
Wzorzec Pełnomocnik – wytłumaczenie wideo
Po więcej praktycznych przykładów na przykładzie frameworka Spring odsyłam Cię do mojego krótkiego wideo:
W opisie filmu znajdziesz link do pełnego szkolenia na temat Proxy, gdzie poruszam również wykorzystanie tego wzorca w Springu.