Olá pessoal, estou estudando um pouco sobre o Padrão de Projeto Proxy e estou tendo dificuldades em achar conteúdos como artigos e matérias focadas nele, e o que mais estou com dificuldade é em achar algum código simples que possa mostra como é a imolementação deste padrão. Gostaria de uma ajuda sobre onde encontrar artigos e, se possível, alguém me mostre um código simples para mim visualizar como ele funciona.
[quote=hannibal_daturn]Olá pessoal, estou estudando um pouco sobre o Padrão de Projeto Proxy e estou tendo dificuldades em achar conteúdos como artigos e matérias focadas nele, e o que mais estou com dificuldade é em achar algum código simples que possa mostra como é a imolementação deste padrão. Gostaria de uma ajuda sobre onde encontrar artigos e, se possível, alguém me mostre um código simples para mim visualizar como ele funciona.
[/quote]
O padrão Proxy é utilizado para esconder manipulações que acontecem antes , após, ou em vez dos métodos da classe normal.
O Java conta com a classe Proxy para fabricar proxies com base em interfaces.
O exemplo comum é do proxy remoto. Aqui vc trabalha com uma classe que tem a mesma interfaces que a classe original, mas
que na realidade é uma classe diferente que contêm um conjunto de mecanismo para se comunicar com a classe real.
//ProxyImage.java
public class ProxyImage implements Image {
private String filename;
private Image image;
public ProxyImage(String filename) { this.filename = filename; }
public void displayImage() {
if (image == null) {
image = new RealImage(filename); // load only on demand
}
image.displayImage();
}
}
//ProxyExample.java
public class ProxyExample {
public static void main(String[] args) {
ProxyImage image1 = new ProxyImage(“Imagem001.jpg”);
ProxyImage image2 = new ProxyImage(“Imagem002.jpg”);
ProxyImage image3 = new ProxyImage(“Imagem003.jpg”);
image1.displayImage(); // loading necessary
image2.displayImage(); // loading necessary
image2.displayImage(); // no loading necessary; already done
// the third image will never be loaded - time saved!
}
}[/code]
Eu vi este código num dos links que me passaram, e gostaria que vocês me mostrassem onde está aplicado o padrão proxy nele.
Se eu criar 3 classes (“A”, “B” e “C”) onde a classe “A” representa uma pessoa, a “B” representa o proxy e a “C” que executa o programa. Nesta situação, para “B” ser um proxy, deve fazer com que todos os objetos da classe “A” só seja acessado por “C” através da classe “B”. É isso??? (me ajudem nessa explicação que me confundi eu acho, hehehe).
[quote=sergiotaborda][quote=hannibal_daturn]
Eu vi este código num dos links que me passaram, e gostaria que vocês me mostrassem onde está aplicado o padrão proxy nele.
Se eu criar 3 classes (“A”, “B” e “C”) onde a classe “A” representa uma pessoa, a “B” representa o proxy e a “C” que executa o programa. Nesta situação, para “B” ser um proxy, deve fazer com que todos os objetos da classe “A” só seja acessado por “C” através da classe “B”. É isso??? (me ajudem nessa explicação que me confundi eu acho, hehehe).
[/quote]
Sim. É isso.
(Esse é uma das possibilidades. Existem outras. Mas para entender o padrão é isso ai)
[/quote]
Ok, me ajuda nesse código abaixo que montei. Ele está no padrão Proxy? Se sim, ele está muito notável?
Se você conseguir melhorar para melhor exemplificar o Padrão Proxy altera e me mostra ok?
//A.java
public class A {
void m1() {
System.out.print("\n\t\tOlá. Seja bem vindo ao mundo JAVA!");
}
int m2(int p) {
p = p*10;
return p;
}
void m3(String p) {
System.out.print(?Método que C não tem acesso.?);
}
}
//B.java
class B {
A a = new A();
void m1(){
a.m1();
}
int m2(int p){
return (a.m2(p));
}
}
//C.java
import java.util.Scanner;
public class C {
public static void main(String[] args) {
B b = new B();
Scanner input = new Scanner(System.in);
int p;
b.m1();
System.out.print("\n\tDigite um número:");
p=input.nextInt();
System.out.print("\n\t\tO resultado foi "+b.m2(p)+"!!!");
}
}
Obrigado pela atenção e paciência. Abraço e fica com Deus. =D
Não tinha visto a sua resposta ( Um ano depois, mas o que conta é a intensão)
Esse B que vc desenhou ai usando o A não é um Proxy.
PAra ser um proxy B tem que ser um A. Ou seja B instanceof A tem que dar true.
A maneira fácil de fazer isso é usando herança directa B extends A outra forma é criar uma interface A e criar um B implements A e um X implements A onde X é o cara real e B é o Proxy.
Este padrão, tal como todos os padrões, é indicado para resolver um determinado problema. Sempre que vc precisar resolver esse problema, usar o padrão é indicado sem problemas. Sempre que vc o usar para resolver outros problemas, ai sim, tem todas as contra-indicações do mundo.
Padrões são como remédios. Têm que ser usados com cuidado, para o fim a que se destinam. Em caso de dúvida um médi… quer dizer - um desenvolvedor experiente deve ser consultado
[quote=sergiotaborda]Não tinha visto a sua resposta ( Um ano depois, mas o que conta é a intensão)
[/quote]
Olá, uma pequena correção de português.O correto seria “intenção”, embora intensão também exista ela denota um outro significado o de intensidade, ou aumento de tensão, já “intenção” grafada com “ç” denota um resultado que se deseja atingir, um significado, ou o ato de escolher mentalmente um plano de ação a seguir.
Neste intervalo de tempo estudei um bocado diversos Padrões de Projeto (Design Partners) e com este conhecimento irei criar uns tópicos sobre cada um deles.