Definição
Um Proxy é um padrão estrutural que oferece um stand-in para um outro objeto, para controlar o acesso a ele.
Quando usar
• Quando a criação de um objeto é relativamente cara, pode ser uma boa
idéia substituí-la por um proxy que pode ter certeza que a instanciação do
objeto caro é mantida a um mínimo.
• implementação do Proxy pattern permite o login e verificação de autoridade para chegar ao objeto real que é solicitado.
• Pode fornecer uma representação local de um objeto em um local remoto.
Benefícios
Dá a capacidade de controlar o acesso a um objeto, seja por causa de um
processo de criação onerosa das questões do objeto ou de segurança.
Desvantagens / consequências
Introduz um outro nível de abstração de um objeto, e se o acesso ao objeto é feito diretamente e outro através do proxy há uma chance de que eles fiquem com um comportamento diferente, e esta pode não ser a intenção do criador.
Exemplo
package cachedLogging;
public interface ICachedLogging {
public void logRequest(String logString);
}
package cachedLogging;
public class CachedLogger implements ICachedLogging {
public void logRequest(String logString) {
System.out.println("CachedLogger logging to some
expensive resource: " + logString + "\n");
}
}
package cachedLogging;
import java.util.ArrayList;
import java.util.List;
public class CachedLoggingProxy implements ICachedLogging {
List<String> cachedLogEntries = new ArrayList<String>();
CachedLogger cachedLogger = new CachedLogger();
public void logRequest(String logString) {
addLogRequest(logString);
}
private void addLogRequest(String logString) {
cachedLogEntries.add(logString);
if(cachedLogEntries.size() >= 4)
performLogging();
}
private void performLogging() {
StringBuffer accumulatedLogString = new StringBuffer();
for (String logString : cachedLogEntries) {
accumulatedLogString.append("\n"+logString);
System.out.println(
"CachedLoggingProxy: adding logString \"" +logString + "\" to cached log entries.");
}
System.out.println(
"CachedLoggingProxy: sends accumulated logstring to CachedLogger.");
cachedLogger.logRequest(accumulatedLogString.toString());
cachedLogEntries.clear();
System.out.println("CachedLoggingProxy: cachedLogEntries
cleared.");
}
}
package client;
import cachedLogging.*;
public class Client {
public static void main(String[] args) {
ICachedLogging logger = new CachedLoggingProxy();
for (int i = 1; i < 5; i++) {
logger.logRequest("logString "+i);
}
}
}
Quando o cliente é executado, o resultado é:
CachedLoggingProxy: adicionando logString "logString 1" para entradas de log de cache.
CachedLoggingProxy: adicionando logString "logString 2" para entradas de log de cache.
CachedLoggingProxy: adicionando logString "logString 3" para entradas de log de cache.
CachedLoggingProxy: adicionando logString "logString 4" para as entradas de log em cache.
CachedLoggingProxy: envia logstring acumulado para CachedLogger.
CachedLogger log para algum recurso caro:
logString 1
logString 2
logString 3
logString 4
CachedLoggingProxy: cachedLogEntries desmarcada.
CachedLoggingProxy: adicionando logString "logString 1" para entradas de log de cache.
CachedLoggingProxy: adicionando logString "logString 2" para entradas de log de cache.
CachedLoggingProxy: adicionando logString "logString 3" para entradas de log de cache.
CachedLoggingProxy: adicionando logString "logString 4" para as entradas de log em cache.
CachedLoggingProxy: envia logstring acumulado para CachedLogger.
CachedLogger log para algum recurso caro:
logString 1
logString 2
logString 3
logString 4
CachedLoggingProxy: cachedLogEntries desmarcada.
Nenhum comentário:
Postar um comentário