4
This proxy pattern example can be found on Wikipedia.
reference: http://en.wikipedia.org/wiki/Proxy_pattern
What I want to know is this:
- Why should I use this pattern? When should I use it? Why is it good?
- How would be a wrong way to make this pattern?
- There are flaws in this pattern?
- Something else to add?
Example:
import java.util.*;
interface Imagem {
    public void mostrarImagem();
}
// no Sistema A
class ImagemReal implements Imagem {
private String nomeDoArquivo;
    public ImagemReal(String nomeDoArquivo) {
    this.nomeDoArquivo = nomeDoArquivo;
    carregarImagemDoDisco();
}
private void carregarImagemDoDisco() {
    System.out.println("Carregando " + nomeDoArquivo);
}
public void mostrarImagem() {
        System.out.println("Mostrando " + nomeDoArquivo);
    }
}
// no Sistema B
class ImagemProxy implements Imagem {
    private String nomeDoArquivo;
    private Imagem imagem;
public ImagemProxy(String nomeDoArquivo) {
    this.nomeDoArquivo = nomeDoArquivo;
}
public void mostrarImagem() {
    if(imagem == null)
      imagem = new ImagemReal(nomeDoArquivo);
    imagem.mostrarImagem();
}
}
class ExemploProxy {
    public static void main(String[] args) {
        Imagem imagem1 = new ImagemProxy("ResOi_10MB_Foto1");
        Imagem imagem2 = new ImagemProxy("ResOi_10MB_Foto2");
        imagem1.mostrarImagem(); // é necessário o carregamento
        imagem1.mostrarImagem(); // não é necessário o carregamento
        imagem2.mostrarImagem(); // é necessário o carregamento
        imagem2.mostrarImagem(); // não é necessário o carregamento
        imagem2.mostrarImagem(); // não é necessário o carregamento
        imagem1.mostrarImagem(); // não é necessário o carregamento
    }
}