Wzorzec Proxy kontroluje dostęp do klas i obiektów jako pośrednik. Zanim żądanie trafi do prawdziwego podmiotu RealSubject, pośrednik Proxy przetwarza je i jeśli spełnione są odpowiednie kryteria to udostępnia obiekt. Klient nie wie, że jego żądanie przechodzi przez Proxy. Przykładem może być dostęp poprzez logowanie do określonych zasobów serwisu.

SCHEMAT WZORCA PROXY

proxy php

Źródło: en.wikipedia.org/wiki/Proxy_pattern

PRZYKŁAD

W przykładzie, klient będzie miał dostęp do interfejsu tylko z określonego adresu IP. Możemy założyć, że jest to witryna widoczna tylko dla pracowników firmy, biura itp. Oczywiście, ktoś „z zewnątrz” może również uruchomić stronę znając jej adres, ale otrzyma odpowiedni komunikat z informacją o braku uprawnień.

Pierwszy uczestnik wzorca – interfejs Subject przechowuje samo żądanie – request(), które może być w dowolny sposób implementowane w innych klasach.

Poniższa klasa RealSubject implementuje interfejs Subject i metodę request(). Metoda jest prosta i wyświetla jedynie komunikat z wiadomością dla klienta. Oczywiście może to być cokolwiek innego 🙂 .

Gwóźdź programu – Proxy implementuje również interfejs Subject oraz żądanie request(). Metoda checkIP() porównuje adres IP użytkownika ze stałym adresem ’127.0.0.1′.

Konstruktor pobiera prawdziwy podmiot RealSubject i ustawia jego instancję, aby mieć dostęp do metody request(). Żądanie request() – klasy Proxy – nadpisuje implementację z prawdziwego podmiotu i dodaje warunek sprawdzający IP, poprzez metodę checkIP(). Jeśli żądanie przejdzie poprawną weryfikację adresu IP to wykona się request() z klasy RealSubject:

Na koniec tworzymy klasę klienta i testujemy program:


Przykład na GitHub →