Sablonul de proiectare Proxy

Descriere

Sablonul proxy ofera un mecanism de acces controlat la un obiect prin intermediul altui obiect.

Situatii in care sablonul proxy este util:

  • obiectului real este costisitoare, si acest va fi creat doar in momentul in care o metoda a acestuia este accesata pentru prima data prin intermediul obiectului proxy;
  • obiectul proxy implementeaza mecanisme de securitate pentru a verifica drepturile de acces la obiectul real;
  • obiectul proxy ofera acces la un obiect real distribuit (aflat intr-o alta locatie) - a se vedea mecanismul RMI (https://docs.oracle.com/javase/tutorial/rmi/);
  • obiectul prxy efectuiaza operatii suplimentare pe langa cea de apelare a operatiei din obiectul real;

Diagrama UML

Exemplu

package isp.dp.proxy;
 
public class Client {
    public static void main(String[] args) {
        Proxy opsProxy = new Proxy();
        opsProxy.action2();
        opsProxy.action1();
    }
}
 
interface Operations{
    void action1();
    void action2();
}
 
class RealOperations implements Operations{
    @Override
    public void action1() {
        System.out.println("Do action 1");
    }
 
    @Override
    public void action2() {
        System.out.println("Do action 2");
    }
}
 
class Proxy implements Operations{
 
    private RealOperations real;
 
    Proxy(){
        real = new RealOperations();
    }
 
 
    @Override
    public void action1() {
        real.action1();
    }
 
    @Override
    public void action2() {
        real.action2();
    }
}

Rezultatul rularii codului:

Do action 2
Do action 1