Wzorce projektowe: proxy

Proxy jest strukturalnym wzorcem projektowym wykorzystywanym do reprezentowania skomplikowanego obiektu lub obiektu, którego utworzenie wymaga dużego nakładu czasu, za pomocą obiektu prostego.

Wzorzec ten ma na celu zbudowanie klasy będącej odpowiednikiem innej klasy, pozwalając jednocześnie na zarządzanie dostępem do niej:

  • gdy chcesz wykonywać pewne zdalne obiekty(remote proxy – pełnomocnik zdalny),
  • gdy z pewnych względów nie chcesz tworzyć obiektu danej klasy aż do chwili wywołania jednej z jego metod, np. gdy z góry wiesz, że utworzenie takiego obiektu jest bardzo czasochłonne bądź zasobochłonne (virtual proxy – pełnomocnik wirtualny),
  • gdy chcesz kontrolować dostęp do pewnego obiektu twojego systemu (protection proxy – pełnomocnik ochraniający),
  • gdy poza akcją wykonywaną przez obiekt danej klasy musisz wykonać także dodatkowe akcje powiązane z jego metodą bądź metodami (smart proxy – sprytny pełnomocnik).

User

package pl.roboczenotatki.designpatterns.proxy;

public interface User {
	public String getLogin();

	public String getPass();
}

Client

package pl.roboczenotatki.designpatterns.proxy;

public class Client implements User{

	public String getLogin() {
		return "clientLogin";
	}

	public String getPass() {
		return "clientPass";
	}

}

ClientProxy

package pl.roboczenotatki.designpatterns.proxy;

public class ClientProxy implements User {
	private Client client;

	public ClientProxy() {
		super();
		this.client = new Client();
	}

	public String getLogin() {
		return client.getLogin();
	}

	public String getPass() {
		return client.getPass() + "hacked";
	}
}

App

package pl.roboczenotatki.designpatterns.proxy;

public class App
{
    public static void main( String[] args )
    {
    	System.out.println( "Design pattern: Proxy" );

    	User client = new Client();
    	System.out.println("login: " + client.getLogin() + ", pass:" + client.getPass());

    	User clientProxy = new ClientProxy();
    	System.out.println("login: " + clientProxy.getLogin() + ", pass:" + clientProxy.getPass());
    }
}

Output:
Design pattern: Proxy
login: clientLogin, pass:clientPass
login: clientLogin, pass:clientPasshacked

 

Diagram:

proxy

Reklamy

Wzorce projektowe

Katalog wzorców projektowych Gang of Four (Gamma,Johnson, Helm, Vlissides) obejmuje 23 wzorce:

– kreacyjne: Abstract Factory, Builder, Factory Method, Prototype, Singleton
– strukturalne: Adapter, Bridge, Composite, Decorator,Composite, Facade, Proxy, Flyweight
– behawioralne: Chain of Responsibility, Command,Interpreter, Mediator, Iterator, Memento, Observer,